blob: 2cd20b3b64ebea208d9a43f7fab03f3cd55d39da [file] [log] [blame]
// Copyright 2003-2004 The Apache Software Foundation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <stdio.h>
#include <memory.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdlib.h>
#include <string>
#define CHK_NULL(x) if ((x)==NULL) exit (1)
#define CHK_ERR(err,s) if ((err)==-1){ perror(s); exit(1); }
const unsigned int INVALID_SOCKET = 0;
const int SOCKET_ERROR = -1;
int main ()
{
int err;
int sd;
struct sockaddr_in sa;
char* str;
char buf [4096];
char msg [8096];
int message_size = 8192;
// Message that comes on the wire. This could be a soap message or
// mime or chunked data
char msgLine[message_size];
FILE* pFile;
char filename[32];
strcpy(filename, "cli_message.txt");
// Open the file to read the message
if ((pFile = fopen (filename, "r")) == NULL)
return 1;
char sLine[message_size];
std::string message = msgLine;
// Read the properly formatted soap message
while(fgets (sLine, message_size, pFile) != NULL )
{
message += sLine;
message.replace(message.length() -1 , 1, "\r\n");
}
printf("message:%s\n", message.c_str());
// -----------------------------------------------
// Create a socket and connect to server using normal socket calls.
sd = socket (AF_INET, SOCK_STREAM, 0);
CHK_ERR(sd, "socket");
memset (&sa, '\0', sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr ("127.0.0.1"); // Server IP
sa.sin_port = htons (1111); // Server Port number
err = connect(sd, (struct sockaddr*) &sa,
sizeof(sa));
CHK_ERR(err, "connect");
// ---------------------------------------------------
// DATA EXCHANGE - Send a message and receive a reply.
if( (err = send( sd, message.c_str(), strlen(message.c_str()), MSG_DONTROUTE)) == SOCKET_ERROR)
{
printf( "<write exception, error no:%d\n", err);
}
int nByteRecv = 0;
int msg_size = 0;
do
{
if( (nByteRecv = recv(sd, buf, sizeof(buf)-1, 0)) == SOCKET_ERROR)
{
printf( "Channel error while getting data\n");
}
if( nByteRecv)
{
// printf("nByteRecv:%d\n", nByteRecv);
buf[nByteRecv] = '\0';
strcpy(msg, buf);
msg_size += nByteRecv;
}
else
{
printf ("execution break\n");
}
}
while(nByteRecv < 0);
msg[msg_size] = '\0';
printf ("Got %d chars:\n%s\n", msg_size, buf);
// Clean up.
//close (sd);
return 0;
}
// EOF - cli.cpp