Example #1
0
boolean GPRSbee::httpPostTextFile(char *serverName, char *serverPort, char *serverURL, char *fileContent, byte maxNumConnectAttempts) {

  // returns true if the status line of the response contains the http code : 200 

  boolean requestSuccess = false; 
  
  long fileContentLength = 0;
  while(fileContent[fileContentLength] != '\0') fileContentLength++;
  

  boolean tcpConnectSuccess = tcpConnect(serverName, serverPort, maxNumConnectAttempts);
  
  if(tcpConnectSuccess) {
  
  
    char httpResponseStatusLineBuffer[60];
    
    char formFieldName[] = HTTP_POST_FILE_DEFAULT_FORM_FIELD_NAME;
    
     
    requestAT(F("AT+CIPSEND"), 2, AT_CIPSEND_RESP_TIMOUT_IN_MS);
    
    echoHttpRequestInitHeaders(serverName, serverURL, "POST");
    
    echoHttpPostFileRequestAdditionalHeadersPart1(fileContentLength, formFieldName);
    
    serialConnection.print((char) 26);
    
    
    delay(300);
    
      
    requestAT(F("AT+CIPSEND"), 2, AT_CIPSEND_RESP_TIMOUT_IN_MS);
    
    serialConnection.print(fileContent);
    
    serialConnection.print((char) 26);
    
    
    delay(300);
    
    
    requestAT(F("AT+CIPSEND"), 2, AT_CIPSEND_RESP_TIMOUT_IN_MS);
    
    echoHttpPostFileRequestAdditionalHeadersPart2();  
   
    serialConnection.print((char) 26);
    

    retrieveHttpResponseStatusLine(httpResponseStatusLineBuffer, sizeof(httpResponseStatusLineBuffer), HTTP_RESP_TIMOUT_IN_MS);
  
    if(strstr(httpResponseStatusLineBuffer, "200") != NULL) requestSuccess = true; 
  
    tcpClose();

  }
  
  return requestSuccess;

}
void RFIDMonitorDaemon::start()
{
    if(m_localServer->listen(m_serverName)){
        qDebug() <<  QString("Server name: %1").arg(m_localServer->serverName());

        initMonitor();

        QThread *consoleThread = new QThread(this);
        Console *console = new Console;
        console->moveToThread(consoleThread);

        connect(consoleThread, SIGNAL(destroyed()), console, SLOT(deleteLater()));
        connect(consoleThread, &QThread::started, console, &Console::run);
        connect(console, &Console::exitApp, consoleThread, &QThread::quit);
        connect(console, SIGNAL(exitApp()), qApp, SLOT(quit()));

        // consoleThread->start();

        QTimer::singleShot(100, this, SLOT(tcpConnect()));
    }else{
        qDebug() <<  "Could not start IPC server";
    }
    if(!m_udpSocket->bind(QHostAddress::Any, 9999))
        qDebug() <<  QString("Couldn't listening to broadcast");
}
Example #3
0
File: main_rc.c Project: fzoli/C
// Establish a connection using an SSL layer
connection *sslConnect(SSL_CTX* ctx) {
    if (ctx == NULL) return NULL;
    
    connection *c;
    c = malloc(sizeof (connection));
    c->sslHandle = NULL;

    c->socket = tcpConnect();

    if (c->socket) {
        // Create an SSL struct for the connection
        c->sslHandle = SSL_new(ctx);
        if (c->sslHandle == NULL)
            ERR_print_errors_fp(stderr);
        // Connect the SSL struct to our connection
        if (!SSL_set_fd(c->sslHandle, c->socket))
            ERR_print_errors_fp(stderr);

        // Initiate SSL handshake
        if (SSL_connect(c->sslHandle) != 1)
            ERR_print_errors_fp(stderr);
    }
    else {
        perror("Connect failed");
    }

    return c;
}
Example #4
0
int Socket::init()
{
	struct sockaddr_in servaddr;
	int optval = 1;
	sockfd = tcpSocket(AF_INET, SOCK_STREAM, 0);
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(port);

	// Eliminates "Address already in use" error from bind
    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
                    (const void *)&optval, sizeof(int)) < 0)
        Error::sys("setsockopt");

	if (socktype == SRV_SOCKET){
	    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	    tcpBind(sockfd, (SA *) &servaddr, sizeof(servaddr));
	    tcpListen(sockfd, LISTENQ);
	} else if (socktype == CLI_SOCKET){ 
	    if (inet_pton(AF_INET, host, &servaddr.sin_addr) < 0)
	        Error::quit("inet_pton error for %s", host);
	    tcpConnect(sockfd, (SA *)&servaddr, sizeof(servaddr));
	} else {
		Error::quit("Unkown SockType");
	}
	/* For client, this sockfd is connfd,
	 * for server, this sockfd is listenfd.	*/
	return sockfd; 
}
Example #5
0
boolean GPRSbee::httpGet(char *serverName, char *serverPort, char *serverURL, byte maxNumConnectAttempts) {

  // returns true if the status line of the response contains the http code : 200 

  boolean requestSuccess = false; 

  boolean tcpConnectSuccess = tcpConnect(serverName, serverPort, maxNumConnectAttempts);
  
  if(tcpConnectSuccess) {
  
    char httpResponseStatusLineBuffer[60];
    
    requestAT(F("AT+CIPSEND"), 2, AT_CIPSEND_RESP_TIMOUT_IN_MS);

    echoHttpRequestInitHeaders(serverName, serverURL, "GET");
  
    serialConnection.print('\n');
  
    serialConnection.print((char) 26);
    
    retrieveHttpResponseStatusLine(httpResponseStatusLineBuffer, sizeof(httpResponseStatusLineBuffer), HTTP_RESP_TIMOUT_IN_MS);
  
    if(strstr(httpResponseStatusLineBuffer, "200") != NULL) requestSuccess = true; 
  
    tcpClose();
  
  }
  
  return requestSuccess;

}
Example #6
0
bool SSMTP::send(MIMEmessage *message)
{
  log.clear();
  int mSize = message->getMIMEText().toLatin1().size();
  /* calc timeout for slowly 56 kbps connection */
  messageRespTimeout = (mSize / (56000/8)) * 1000;

  if (!tcpConnect()) return false;
  if (!waitForResponse()) return false;
  if (!checkRespCode(220)) return false;
  if (!sendCmd("EHLO " + smtp_name,250)) return false;
  if (!smtp_user.isEmpty() || smtp_pass.isEmpty())
  {
    if (!sendCmd("AUTH LOGIN",334)) return false;
    if (!sendCmd(smtp_user.toUtf8().toBase64(),334)) return false;
    if (!sendCmd(smtp_pass.toUtf8().toBase64(),235)) return false;
  }
  if (!sendCmd("MAIL FROM: " + message->getFromEmail(),250)) return false;
  for (int i=0; i < message->rcptList()->count(); ++i)
  {
    if (!sendCmd("RCPT TO: " + message->rcptList()->at(i),250)) return false;
  }
  if (!sendCmd("DATA",354)) return false;
  sendText(message->getMIMEText(),true);
  sendText(".");
  if (!waitForResponse(true)) return false;
  if (!checkRespCode(250)) return false;
  if (!sendCmd("QUIT",221)) return false;

  tcpDisconnect();
  return true;
}
Example #7
0
SOCKET WSocket::tcpConnectA(const LPSTR host, const WORD port)
{
  WORD tcpPort = SWAP_WORD(port);

  //Obtain the data the remote server.
  SOCKADDR_STORAGE *destAddrIpv4 = NULL;
  SOCKADDR_STORAGE *destAddrIpv6 = NULL;

  {
    struct addrinfo *aiList;
    if(CWA(ws2_32, getaddrinfo)(host, NULL, NULL, &aiList) != 0)return INVALID_SOCKET;

    struct addrinfo *cur = aiList;
    while(cur)
    {
      if(cur->ai_family == AF_INET)destAddrIpv4 = (SOCKADDR_STORAGE *)Mem::copyEx(cur->ai_addr, cur->ai_addrlen);
      else if(cur->ai_family == AF_INET6)destAddrIpv6 = (SOCKADDR_STORAGE *)Mem::copyEx(cur->ai_addr, cur->ai_addrlen);
      cur = cur->ai_next;
    }

    CWA(ws2_32, freeaddrinfo)(aiList);
  }

  SOCKET s = INVALID_SOCKET;

  //FIXME: change prioretet when IPv6 will become porulyarnee IPv4.
  if(destAddrIpv4 != NULL)
  {
    ((SOCKADDR_IN *)destAddrIpv4)->sin_port = tcpPort;
    s = tcpConnect(destAddrIpv4);
  }

  //Xs on how much it is logical to relanyh conditions.
  if(destAddrIpv6 != NULL && s == INVALID_SOCKET)
  {
    ((SOCKADDR_IN6 *)destAddrIpv6)->sin6_port = tcpPort;
    s = tcpConnect(destAddrIpv6);
  }

  Mem::free(destAddrIpv4);
  Mem::free(destAddrIpv6);

  return s;
}
Example #8
0
SOCKET WSocket::tcpConnectA(const LPSTR host, const WORD port)
{
  WORD tcpPort = SWAP_WORD(port);

  //Получаем данные удаленного сервера.
  SOCKADDR_STORAGE *destAddrIpv4 = NULL;
  SOCKADDR_STORAGE *destAddrIpv6 = NULL;

  {
    struct addrinfo *aiList;
    if(CWA(ws2_32, getaddrinfo)(host, NULL, NULL, &aiList) != 0)return INVALID_SOCKET;

    struct addrinfo *cur = aiList;
    while(cur)
    {
      if(cur->ai_family == AF_INET)destAddrIpv4 = (SOCKADDR_STORAGE *)Mem::copyEx(cur->ai_addr, cur->ai_addrlen);
      else if(cur->ai_family == AF_INET6)destAddrIpv6 = (SOCKADDR_STORAGE *)Mem::copyEx(cur->ai_addr, cur->ai_addrlen);
      cur = cur->ai_next;
    }

    CWA(ws2_32, freeaddrinfo)(aiList);
  }

  SOCKET s = INVALID_SOCKET;

  //FIXME: поменять приоретет, когда IPv6 станет порулярнее IPv4.
  if(destAddrIpv4 != NULL)
  {
    ((SOCKADDR_IN *)destAddrIpv4)->sin_port = tcpPort;
    s = tcpConnect(destAddrIpv4);
  }

  //Хз на сколько это логично в релаьных условиях.
  if(destAddrIpv6 != NULL && s == INVALID_SOCKET)
  {
    ((SOCKADDR_IN6 *)destAddrIpv6)->sin6_port = tcpPort;
    s = tcpConnect(destAddrIpv6);
  }

  Mem::free(destAddrIpv4);
  Mem::free(destAddrIpv6);

  return s;
}
Example #9
0
/*
 * Make a connection to the given <host> and <port>. Incoming data on this socket is reported using
 * the callback installed with nsOnSocket(). The new file descriptor is returned, or -1 if an error
 * occurred.
 */
int nsConnect(NS *ns, const char *host, int port)
{
    int fd = tcpConnect(host, port);

    if (fd >= 0) {
        ns_add_connection(ns, fd);
    }

    return fd;
}
void RFIDMonitorDaemon::tcpDisconnected()
{
    if(isConnected){
        QJsonObject obj;
        obj.insert("full", QJsonValue(false));
        // Inform RFIDMonitor that the server is no more connected
        ipcSendMessage(buildMessage(QJsonObject(), "SLEEP").toJson());
        ipcSendMessage(buildMessage(obj, "FULL-READ").toJson());
        isConnected = false;
    }
    // Try to reconnect the server after 5 seconds
    QTimer::singleShot(5000, this, SLOT(tcpConnect()));
}
Example #11
0
Widget::Widget( QWidget * parent )
	: QWidget( parent )
{
	createWidgets();

	setWindowTitle( tr("Echo client %1").arg( PORT ) );

	connect( &socket, SIGNAL( connected() ), SLOT( slotConnected() ) );
	connect( &socket, SIGNAL( disconnected() ), SLOT( slotDisconnected() ) );
	connect( &socket, SIGNAL( readyRead() ), SLOT( slotRead() ) );

	tcpConnect();
}
Example #12
0
/* Main Entry */
int main(int argc, char **argv)
{
	// init connection object
	Connection conn;
	memset(&conn, 0, sizeof(conn));
	conn.port = PORT; // assign default port
	conn.host = HOST;

	// Parse arguments
	parseArguments(argc, argv, &conn);

	// init SSL library
	conn.sslContext = initSSLContext(CLIENT_CERTIFICATE, CA_CERTIFICATE);
	SSL_CTX_set_options(conn.sslContext, SSL_OP_NO_SSLv2);
	SSL_CTX_set_cipher_list(conn.sslContext, "SHA1");

	// Connect
	if (tcpConnect(&conn) < 0){
		tcpDisconnect(&conn);
		exit(0);
	}

	SSL * ssl = SSL_new(conn.sslContext);
	BIO * sbio = BIO_new_socket(conn.socket, BIO_NOCLOSE);
	SSL_set_bio(ssl, sbio, sbio);
	int ret;

	ret = SSL_connect(ssl);
	if (ret <= 0){
		printf(FMT_CONNECT_ERR);
		handleError(ssl, ret);
	}
	else{
		// Process Message
		if (checkServerCertification(ssl) == OK){
			processMessage(ssl);
		}
	}

	// close ssl connection
	if (!SSL_shutdown(ssl)){
		tcpDisconnect(&conn);
		SSL_shutdown(ssl);
	}
	SSL_free(ssl);

	// Disconnect
	tcpDisconnect(&conn);
	destroySSLContext(conn.sslContext);
	return 1;
}
Example #13
0
void 
main( int argc, char **argv )
{
    SOCKET	sock;
    int		arg;
    char	*host = DEFAULT_HOST;
    u_short	port = (u_short)DEFAULT_PORT;

    for( arg = 1; arg < argc; arg++ )
    {
	if ( argv[ arg ][0] != '-' )
	{
	    fprintf( stderr, "Invalid command line argument: %s\n", argv[ arg ] );
	    exit(1);
	}

	switch( argv[ arg ][1] )
	{
	case 'h':
	    printf( "-t <host>\tTarget host name (default 'localhost')\n" );
	    printf( "-p <port>\tTarget port number (default 16903)\n" );
	    printf( "-e\t\tAES Mode ECB\n" );
	    printf( "-v\t\tVerbose\n" );
	    exit(0);

	case 't' :  host = argv[ ++arg ];		break;
	case 'p' :  port = atoi( argv[ ++arg ] );	break;
	case 'e' :  sessKeyMode = CRYPT_MODE_ECB;	break;
	case 'v' :  verbose = TRUE;			break;

	default:
	    fprintf( stderr, "Invalid command line flag: %s\n", argv[ arg ] );
	    exit(1);
	}
    }

    if ( ! initCrypt() )  exit(1);
    sock = tcpConnect( host, port );
    if ( ! initSession( sock ) )  exit(1);
    if ( ! clientRequest( sock, host, port ) )  exit(1);
    shutdown( sock, 2 );
    closesocket( sock );

    if ( WSACleanup() == SOCKET_ERROR )
	fprintf( stderr, "Problem with socket cleanup\n" );

    termCrypt();

    exit(0);
}
Example #14
0
connection *sslConnect (void)
{
   connection *c;

   c = malloc (sizeof (connection));
   c->sslHandle = NULL;
   c->sslContext = NULL;

   c->socket = tcpConnect ();
   if (c->socket)
     {
       // Register the error strings for libcrypto & libssl
       SSL_load_error_strings ();

       // Register the available ciphers and digests
       SSL_library_init ();

       // New context saying we are a client, and using SSL 2 or 3
       c->sslContext = SSL_CTX_new (SSLv23_client_method ());
       if (c->sslContext == NULL)
       {
         ERR_print_errors_fp (stderr);
       }

       // Create an SSL struct for the connection
       c->sslHandle = SSL_new (c->sslContext);
       if (c->sslHandle == NULL)
       {
         ERR_print_errors_fp (stderr);
       }

       // Connect the SSL struct to our connection
       if (!SSL_set_fd (c->sslHandle, c->socket))
       {
         ERR_print_errors_fp (stderr);
       }

       // Initiate SSL handshake
       if (SSL_connect (c->sslHandle) != 1)
       {
         ERR_print_errors_fp (stderr);
       }
     }
   else
     {
       perror ("Connect failed");
     }

   return c;
}
Example #15
0
/*
 * Add an output channel to <logger> that sends messages over a TCP connection
 * to port <port> on host <host>. If no connection could be opened, -1 is
 * returned and the channel is not created.
 */
int logToTCP(Logger *logger, const char *host, int port)
{
    int fd;

    if ((fd = tcpConnect(host, port)) < 0)
        return -1;
    else {
        pthread_mutex_lock(&logger->access);

        LOG_Output *out = log_create_output(logger, LOG_OT_TCP);
        out->u.fd = fd;

        pthread_mutex_unlock(&logger->access);

        return 0;
    }
}
Example #16
0
int myregister(){
	string file;
	cout<< "Registering server...\n";
	int sock=tcpConnect("nwprog1.netlab.hut.fi","3000");
	if (sock==-1){
		printf("Registration Failed\n");
		return -1;
		}
			
	
	int totalWriteByte=0;
	/*start of sending PUT requst to server*/
	string str("PUT /servers-behzad.txt");
	str.append(" HTTP/1.1\r\nHost: http://nwprog1.netlab.hut.fi:3000");
	
	str.append("\r\nIam: BEHZAD\r\nContent-Type: text/plain\r\nContent-Length: ");
	
	file.append(runningHost);
	file.append(":");
	file.append(integerToString(SERV_PORT));
	
	str.append(integerToString((int)file.length()));
	str.append("\r\n\r\n");
	str.append(file);

	if ((totalWriteByte=writeString(sock,str))==-1){
		cout<<"Error in sending Registration request";
		return -1;
	}
	/*end of sending PUT requst to server*/

	/*read response*/
	string headers;
	headers=readResponse(sock);
		if (strcmp((const char *)headers.c_str(),"-1")==0)
		{
		cout<<"Error in reading response from server\n";
		close(sock);
		return -1;

	}
	close(sock);
	return 0;
}
MailConnection::MailConnection(std::string address, std::string login, std::string password, int port/* = 0*/)
    : _address(address), _port(port), valid(true), _sock(0), conn(nullptr), originalLogin(login)
{
    // convert login and password to base64 encoding
    _login = base64_encode(reinterpret_cast<const unsigned char*>(login.c_str()),login.size());
    _password = base64_encode(reinterpret_cast<const unsigned char*>(password.c_str()),password.size());

    if (!tcpConnect())
    {
        valid = false;
        return;
    }
    if (!sslConnect())
    {
        valid = false;
        return;
    }
    if (!authenticate())
        valid = false;
}
Example #18
0
// Establish a connection using an SSL layer
int SSLSocket::sslConnect(const char *addr, uint16_t port, int timeout) {
    conn.sslHandle = NULL;
    conn.socket = tcpConnect(addr, port, timeout);
    
    // Create an SSL struct for the connection
    conn.sslHandle = SSL_new(ctx);
    if (conn.sslHandle == NULL) {
        close();
        throw SSLSocketException ( "Could not create SSL object." );
    }
    // Connect the SSL struct to our connection
    if (!SSL_set_fd(conn.sslHandle, conn.socket)) {
        close();
        throw SSLSocketException ( "Could not connect the SSL object to the socket." );
    }
    // Initiate SSL handshake
    if (SSL_connect(conn.sslHandle) != 1) {
        close();
        throw SSLSocketException ( "Error during SSL handshake." );
    }
    return conn.socket;
}
Example #19
0
boolean GPRSbee::httpPostEncodedData(char *serverName, char *serverPort, char *serverURL, char *encodedData, byte maxNumConnectAttempts) {
  
  // encodedData example : "A=1&B=2&C=3" (URL encoded data)
  // returns true if the status line of the response contains the http code : 200 
  
  boolean requestSuccess = false; 
  
  long encodedDataLength = 0;
  while(encodedData[encodedDataLength] != '\0') encodedDataLength++;

  boolean tcpConnectSuccess = tcpConnect(serverName, serverPort, maxNumConnectAttempts);
  
  if(tcpConnectSuccess) {
  
    char httpResponseStatusLineBuffer[60];

    requestAT(F("AT+CIPSEND"), 2, AT_CIPSEND_RESP_TIMOUT_IN_MS);

    echoHttpRequestInitHeaders(serverName, serverURL, "POST");
    
    echoHttpPostURLEncodedRequestAdditionalHeaders(encodedDataLength);
    
    serialConnection.print(encodedData);
    
    serialConnection.print((char) 26);
    
    retrieveHttpResponseStatusLine(httpResponseStatusLineBuffer, sizeof(httpResponseStatusLineBuffer), HTTP_RESP_TIMOUT_IN_MS);
  
    if(strstr(httpResponseStatusLineBuffer, "200") != NULL) requestSuccess = true; 
  
    tcpClose();
    

  }
  
  return requestSuccess;
  
}
Example #20
0
void home_page(char *host, char *fname)
{
	int		fd, n;
	char	line[MAXLINE];
	rio_t rio;

	fd = tcpConnect(host, SERV);	/* blocking connect() */

	n = snprintf(line, sizeof(line), GET_CMD, fname,host);
	rio_writen(fd, line, n);

	rio_readinitb(&rio, fd);
	while ((n = rio_readlineb(&rio, line, sizeof(line))) > 1)
	{
		if (strcmp(line,END_OF_HTML) == 0)
		{
			break;
		}
		parseUrl(line,host);
	}
	printf("end-of-file on home page\n");
	close(fd);
}
Example #21
0
void *do_get_read(void *vptr)
{
	int					fd, n;
	char				line[MAXLINE];
	struct file			*fptr;
	rio_t rio;

	fptr = (struct file *) vptr;

	fd = tcpConnect(fptr->f_host, SERV);
	fptr->f_fd = fd;
	printf("do_get_read for name:%s host:%s, fd %d, thread %d\n",
			fptr->f_name,fptr->f_host, fd, fptr->f_tid);

	write_get_cmd(fptr);	/* write() the GET command */

	rio_readinitb(&rio,fd);
	while((n = rio_readlineb(&rio,line,sizeof(line))) > 1)
	{
		printf("read %d bytes from name:%s host:%s\n", n, fptr->f_name,fptr->f_host);
		if (strcmp(line, END_OF_HTML) == 0)
		{
			break;
		}
		parseUrl(line,fptr->f_host);
	}
	printf("end-of-file on name:%s host:%s\n", fptr->f_name,fptr->f_host);
	close(fd);
	fptr->f_flags = F_DONE;		/* clears F_READING */

	pthread_mutex_lock(&ndone_mutex);
	ndone++;
	pthread_cond_signal(&ndone_cond);
	pthread_mutex_unlock(&ndone_mutex);

	return(fptr);		/* terminate thread */
}
Example #22
0
void QCOMM::readudppendingdatagrams()
{
    char data[512];
    while(udpsocket->hasPendingDatagrams()){
        unsigned int len = udpsocket->read(data,512);
        if(len<sizeof(MDHEADER))
            continue;
        HEARTBEATRESULT *heartack = (HEARTBEATRESULT *)data;
        if(!checkMdHeart(heartack->header))
            continue;
        unsigned short packsize = heartack->header.sizeofpack;
        if (packsize<len)
            continue;
        //if(heartack->header.crc!=qChecksum((char *)&(heartack->funcode),
        //                                   len-sizeof (heartack->header)))
        //    continue;
        switch (heartack->funcode){
        case UDP_TCPCONNECT:{
            QHostAddress addr(ntohl(heartack->ipaddr));
            tcpConnect(addr,heartack->port);
            break;
        }
        case UDP_SSHCONNECT:{
            unsigned int ipaddr = *(unsigned int *)(heartack->ipaddr);
            sshConnect(QHostAddress("ipaddr"),ipaddr);
            break;
        }
        case UDP_MACHINEINFO:
            break;
        case UDP_HEARTBEATINC:
            break;
        default:
            break;
        }
    }
}
Example #23
0
int unregister(){
	cout<<"\nRemoving server registeration...\n";
	int sock=tcpConnect("nwprog1.netlab.hut.fi","3000");
	if (sock==-1){
		printf("Failed\n");
		return -1;
		}
			
	
	int totalWriteByte=0;
	/*start of sending PUT requst to server*/
	string str("PUT /servers-behzad.txt");
	str.append(" HTTP/1.1\r\nHost: http://nwprog1.netlab.hut.fi:3000");
	
	str.append("\r\nIam: BEHZAD\r\nContent-Type: text/plain\r\nContent-Length: 1\r\n\r\n\n");
	
	if ((totalWriteByte=writeString(sock,str))==-1){
		cout<<"Error in sending request";
		return -1;
	}
	/*end of sending PUT requst to server*/

	/*read response*/
	string headers;
	headers=readResponse(sock);
	if (strcmp((const char *)headers.c_str(),"-1")==0)
		{

		close(sock);
		return -1;

	}

	close(sock);
	return 0;
}
Example #24
0
int HttpClient::requestHeader(Url &url, string&headerStr) {
    // construct a request
    string requestStr;
    string path = url.getPath();
    if (path.empty())
        path = "/";
    requestStr = "HEAD " + path + " HTTP/1.0\r\nHost: " + url.getHost()
            + "\r\nUser-Agent: openSE/1.0 (Ubuntu11.04)\r\nAccept-Language: zh,en-us\r\nAccept-Charset: gb2312,utf-8\r\nConnection: Keep-Alive\r\n\r\n";

    cout << "requestStr:\n" << requestStr << endl;

    // send request:
    if (url.getHost() != _preHost) {
        if (_preSockFd != -1) {
            closesocket(_preSockFd);
            _preSockFd = -1;
        }
    }
    int sockFd;
    bool sendSuccess = false;

    // try to use previous connection
    if (_preSockFd != -1) {
        sockFd = _preSockFd;
        if (rio_writen(sockFd, requestStr.c_str(), requestStr.size()) == -1) {
            cerr << "use previous connection:rio_writen error !" << endl;
            closesocket(_preSockFd);
            _preSockFd = -1;
        } else
            sendSuccess = true;
    }

    if (!sendSuccess) {
        // try to creat a new connection
        sockFd = tcpConnect(url.getIp(), url.getPort());
        if (sockFd == -1) {
            cerr << "tcpConnect error" << endl;
            return -1;
        }
        // try to use new connection
        if (rio_writen(sockFd, requestStr.c_str(), requestStr.size()) == -1) {
            cerr << "rio_writen error for requestStr:" << requestStr << endl;
            closesocket(sockFd);
            return -1;
        }
    }


    headerStr.reserve(1024);
    int timeoutSeconds = DEFAULT_TIMEOUT_SECONDS;
    int bytesRead = 0;
    // set socket to no block type
#ifdef _MSC_VER

#else
    int flags;
    flags = fcntl(sockFd, F_GETFL, 0);
    if (flags < 0) {
        cerr << "1.fcntl() error in receiveHeader()< 0" << endl;
        return -1;
    }
    flags |= O_NONBLOCK;
    if (fcntl(sockFd, F_SETFL, flags) < 0) {
        cerr << "2.fcntl() error in receiveHeader" << endl;
        return -1;
    }
#endif

    int newlines = 0;
    while (newlines < 2) {
        fd_set rfds;
        FD_ZERO(&rfds);
        FD_SET(sockFd, &rfds);

        struct timeval tv;
        tv.tv_sec = timeoutSeconds;
        tv.tv_usec = 0;

        int selectRet;
        if (timeoutSeconds >= 0) // wait DEFAULT_TIMEOUT_SECONDS seconds
            selectRet = select(sockFd + 1, &rfds, NULL, NULL, &tv);
        else // wait infinitely
            selectRet = select(sockFd + 1, &rfds, NULL, NULL, NULL);

        if (selectRet == 0 && timeoutSeconds < 0) {
            cerr << "select should wait infinitely" << endl;
            bytesRead = -1;
            break;
        } else if (selectRet == -1) {
            cerr << "select error" << endl;
            bytesRead = -1;
            break;
        } else if (selectRet == 0) {
            cerr << "select timeout after " << timeoutSeconds << " seconds" << endl;
            bytesRead = -1;
            break;
        }

        char c;
        int ret = recv(sockFd, &c, 1, 0);
        if (ret <= 0) {
            cerr << "read error" << endl;
            bytesRead = -1;
            break;
        }
        headerStr += c;
        ++bytesRead;

        if (c == '\r') { /* Ignore CR */
            continue;
        } else if (c == '\n') /* LF is the separator */
            newlines++;
        else
            newlines = 0;
    }
    if (bytesRead <= 0) {
        cerr << "receiveHeader error" << endl;
        closesocket(sockFd);
        _preSockFd = -1;
        return -1;
    }

    return 0;
}
Example #25
0
int main(int argc, char *argv[])
{

	struct sockaddr_in serv_addr;
	int port;
	struct hostent hptr;
	int serv_sockfd;
	int isConnected,pfd,rc;
	char buff[1024],msg[1024];

	if(argc!=4)
	{
		fprintf(stderr,"ERROR \t: USAGE : echocli <ip/host-name> <port> <pipe-fd>\n");
		return EXIT_FAILURE;
	}

	pfd = atoi(argv[3]);


	Getsockaddr(argv[1],&serv_addr);
	char ipstr[20];
	memset(ipstr,0,sizeof(ipstr));
        inet_ntop(AF_INET, &(serv_addr.sin_addr), ipstr, sizeof(ipstr));

	port = atoi(argv[2]);
	if(port < 1025)
	{
		fprintf(stderr,"ERROR \t: PORT NUMBER SHOULD BE GREATER THAN 1024\n");	
		return EXIT_FAILURE;
	}

	//serv_sockfd = createtcpsocket(port,&serv_addr);
        serv_addr.sin_port = htons(port);
        serv_sockfd = Socket(AF_INET, SOCK_STREAM, 0);


	if(serv_sockfd > 0 )
		isConnected = tcpConnect(serv_sockfd,serv_addr,port);



	char status[1024];

	int errcode = EXIT_SUCCESS;

	memset(status,0,sizeof(status));

	if(isConnected)
	{
		strcpy(status,"STATUS \t: Connected to Server...");
		//write_pipe(pfd,status,strlen(status));
	}
	else
	{
		strcpy(status,"STATUS \t: ");
		strcat(status,strerror(errno));
		//printf("%s\n",status);
		write_pipe(pfd,status,strlen(status));
	}
		
	



	int l=0;
        struct timeval       timeout;
        fd_set        master_fds, curr_fds;
        int maxfd;
        int ready_fd_count =0;

	int i=0;
	printf("-----------------------------------------------------------------------\n ECHO MSG \t: ");
	char back_buff[1024];
	memset(back_buff,0,sizeof(back_buff));

        do
        {
		FD_ZERO(&master_fds);
		maxfd = serv_sockfd+1;
		FD_SET(fileno(stdin),&master_fds);
		FD_SET(serv_sockfd,&master_fds);
		
		fflush(stdout);
		fflush(stdout);
		memset(msg,0,sizeof(msg));
		memset(buff,0,sizeof(buff));
		
		rc = select(maxfd,&master_fds,NULL,NULL,NULL);
		
		if(rc < 0)
		{
			perror("select() failed");
			break;
		}
		if( rc == 0)
		{
			printf("SELECT TIMED OUT\n");
			break;
		}

		for(i=0;i<maxfd;i++)
		{

		    if(FD_ISSET(i,&master_fds))
		    {
			if(i==fileno(stdin))
			{
				memset(msg,0,sizeof(msg));
				fgets(msg, sizeof(msg),stdin);
				strcpy(back_buff,msg);
				
				l = strlen(msg);
				msg[l] = '\n';
				if((l=writen(serv_sockfd,msg,l)) <0)
				{
					//send to parent that the echo request was sent to server.
					memset(status,0,sizeof(status));
					strcpy(status,"ERROR \t: Write to Echo Server Failed");
					//printf("%s\n",status);

					isConnected = false;
					shutdown(serv_sockfd,2);
					close(serv_sockfd);
			
					rc = write_pipe(pfd,status,sizeof(buff));
					if(rc == -1)
						printf("PIPE CLOSED. I could be an orphan process now.. :(");
			
					break;
				}
			}
			if(i==serv_sockfd)
			{
				memset(buff,0,sizeof(buff));
				if((rc=read(serv_sockfd,buff,sizeof(buff)))<0)
				{
					//send to parent that echo server responded back.
					memset(status,0,sizeof(status));
					strcpy(status,"ERROR \t: Read from Echo Server Failed");
					//rc = write_pipe(pfd,status,sizeof(status));
					shutdown(serv_sockfd,2);
					close(serv_sockfd);
					isConnected = false;
					break;
					//puts(buff);
	
				}
				else
				{
					//printf("LOG : read %d bytes from server \n",rc);
					if(rc == 0)
					{
						if(errno == EINTR)
						{
							printf("STATUS \t: EINTR\n");
							continue;
						}
						else
						{
							isConnected = false;
							memset(status,0,sizeof(status));
							strcpy(status,"STATUS \t: ECHO SERVER IS DOWN");
							rc = write_pipe(pfd,status,strlen(status));
							
							break;
						}
					}
					printf("Echo Response \t: %s",buff);
					printf("-----------------------------------------------------------------------\nECHO MSG \t: ");
					fflush(stdout);
					fflush(stdout);
					memset(status,0,sizeof(status));
	
					if(strcmp(back_buff,buff) == 0)
					{
						strcpy(status,"STATUS \t: ECHO SERVER WORKS PROPERLY");
						rc = write_pipe(pfd,status,strlen(status));
						//printf("%s\n",status);
					}
					else
					{
						strcpy(status,"STATUS \t: ECHO SERVER IS ERRORNEOUS");
						rc = write_pipe(pfd,status,strlen(status));
						//printf("%s\n",status);
						//printf("SENT : %s\n RECVD :%s\n",back_buff,buff);
						errcode = EXIT_FAILURE;
						break;
					}
					memset(back_buff,0,sizeof(back_buff));
				}
			}
		    }
		}




	}while(isConnected);


	printf("I am done\n");

	shutdown(serv_sockfd,2);
	close(serv_sockfd);

	exit(-1);

}
Example #26
0
error_t socketConnect(Socket *socket, const IpAddr *remoteIpAddr, uint16_t remotePort)
{
   error_t error;

   //Check input parameters
   if(!socket || !remoteIpAddr)
      return ERROR_INVALID_PARAMETER;

#if (TCP_SUPPORT == ENABLED)
   //Connection-oriented socket?
   if(socket->type == SOCKET_TYPE_STREAM)
   {
      //Save port number and IP address of the remote host
      socket->remoteIpAddr = *remoteIpAddr;
      socket->remotePort = remotePort;

      //Select the source address and the relevant network interface
      //to use when establishing the connection
      error = ipSelectSourceAddr(&socket->interface,
         &socket->remoteIpAddr, &socket->localIpAddr);
      //Any error to report?
      if(error) return error;

      //Make sure the source address is valid
      if(ipIsUnspecifiedAddr(&socket->localIpAddr))
         return ERROR_NOT_CONFIGURED;

      //Enter critical section
      osAcquireMutex(&socketMutex);
      //Establish TCP connection
      error = tcpConnect(socket);
      //Leave critical section
      osReleaseMutex(&socketMutex);
   }
   else
#endif
   //Connectionless socket?
   if(socket->type == SOCKET_TYPE_DGRAM)
   {
      //Save port number and IP address of the remote host
      socket->remoteIpAddr = *remoteIpAddr;
      socket->remotePort = remotePort;
      //No error to report
      error = NO_ERROR;
   }
   //Raw socket?
   else if(socket->type == SOCKET_TYPE_RAW_IP)
   {
      //Save the IP address of the remote host
      socket->remoteIpAddr = *remoteIpAddr;
      //No error to report
      error = NO_ERROR;
   }
   //Socket type not supported...
   else
   {
      //Invalid socket type
      error = ERROR_INVALID_SOCKET;
   }

   //Return status code
   return error;
}
Example #27
0
int main(int argc, char **argv)
{
	int listenfd, connfd, n;
	EL *el;
	CF *conf;
	char *opName[] = {
		"Listen",
		"ServerPath",
		"ClusterManagerName",
		"ClusterManagerPort"};
	char *ptr;
	
	socklen_t addrlen;
	char BUFF[MAXLINE];
	struct sockaddr_storage cliaddr;
	
	if (argc > 2)
		err_quit("usage: node [path to config file] <--help>\n");
	
	if (argc == 2 && strcmp(argv[1],"--help") != 0)
		conf = cfileInit(argv[1],opName);
	else if (argc == 1)
		conf = cfileInit(DB_CONF,opName);

	connfd = tcpConnect(
		getOption(conf,"ClusterManagerName"),
		getOption(conf,"ClusterManagerPort"));
	
	if (connfd < 0)
		err_quit("error for connecting cluster manager.\n");

	strcpy(BUFF,"REG ");
	getExternalIp(BUFF + 4);
	strcat(BUFF,"\r\n");
	
	write(connfd,BUFF,strlen(BUFF));
	
	if ((n = read(connfd,BUFF,MAXLINE)) > 0) {
		BUFF[n] = '\0';
		if (strcmp(BUFF,"REG ERR\r\n") == 0)
			err_quit("error for registering node in cluster");
	} else
		err_quit("error for registering node in cluster");

	close(connfd);

	if ((ptr = getOption(conf,"Listen")) != NULL)
		listenfd = 
		tcpListen(getOption(conf,"ServerName"),ptr,&addrlen);
	else
		err_quit("error for opening listen port.\n");
	
	if ((el = el_open()) == NULL)
		err_quit("node error for creating epoll.\n");

	el_addFileEvent(el,listenfd,AE_READABLE,sendRequesData,(void *)conf);
	
	el_start(el,AE_BLOCK);

	el_close(el);
}	
Example #28
0
File: fsm.c Project: 2asoft/freebsd
int
fsm(isc_opt_t *op)
{
     state_t	state;
     isess_t	*sess;

     if((sess = calloc(1, sizeof(isess_t))) == NULL) {
	  // boy, is this a bad start ...
	  fprintf(stderr, "no memory!\n");
	  return -1;
     }

     state = S1;
     sess->op = op;
     sess->fd = -1;
     sess->soc = -1;
     sess->target.address = strdup(op->targetAddress);
     sess->target.port = op->port;
     sess->target.pgt = op->targetPortalGroupTag;

     sess->flags = SESS_INITIALLOGIN | SESS_INITIALLOGIN1;

     do {
	  switch(state) {

	  case S1:
	       switch(tcpConnect(sess)) {
	       case T1: state = S2; break;
	       default: state = S8; break;
	       }
	       break;

	  case S2:
	       switch(startSession(sess)) {
	       case T2: state = S1; break;
	       case T4: state = S4; break;
	       default: state = S8; break;
	       }
	       break;

	  case S4:
	       switch(doLogin(sess)) {
	       case T7:  state = S1; break;
	       case T5:  state = S5; break;
	       default: state = S8; break;
	       }
	       break;

	  case S5:
	       switch(supervise(sess)) {
	       case T8:  state = S1; break;
	       case T9:  state = S6; break;
	       case T11: state = S7; break;
	       case T15: state = S8; break;
	       default: state = S8; break;
	       }
	       break;

	  case S6:
	       switch(startLogout(sess)) {
	       case T13: state = S1; break;
	       case T14: state = S6; break;
	       case T16: state = S8; break;
	       default: state = S8; break;
	       }
	       break;
	  
	  case S7: 
	       switch(inLogout(sess)) {
	       case T18: state = S1; break;
	       case T10: state = S6; break;
	       case T12: state = S7; break;
	       case T16: state = S8; break;
	       default: state = S8; break;
	       }
	       break;

	  case S8:
	       // maybe do some clean up?
	       syslog(LOG_INFO, "terminated");
	       return 0;
	  }
     } while(1);
}
Example #29
0
TcpClient::TcpClient(QString host, quint16 port)
{
    this->host = host.length() > 0 ? host : "127.0.0.1";
    this->port = port > 0 ? port : 27015;
    tcpConnect();
}
Example #30
0
int HttpClient::requestContent(Url &url, string &contentStr, int expectContentLength) {
    // construct a request
    string requestStr;
    string path = url.getPath();
    if (path.empty())
        path = "/";
    requestStr = "GET " + path + " HTTP/1.0\r\nHost: " + url.getHost()
            + "\r\nUser-Agent: openSE/1.0 (Ubuntu11.04)\r\nAccept-Language: zh,en-us\r\nAccept-Charset: gb2312,utf-8\r\nConnection: Keep-Alive\r\n\r\n";

    cout << "requestStr:\n" << requestStr << endl;

    // send request:
    if (url.getHost() != _preHost) {
        if (_preSockFd != -1) {
            closesocket(_preSockFd);
            _preSockFd = -1;
        }
    }
    int sockFd;
    bool sendSuccess = false;

    // try to use previous connection
    if (_preSockFd != -1) {
        sockFd = _preSockFd;
        if (rio_writen(sockFd, requestStr.c_str(), requestStr.size()) == -1) {
            cerr << "use previous connection:rio_writen error !" << endl;
            closesocket(_preSockFd);
            _preSockFd = -1;
        } else
            sendSuccess = true;
    }

    if (!sendSuccess) {
        // try to creat a new connection
        sockFd = tcpConnect(url.getIp(), url.getPort());
        if (sockFd == -1) {
            cerr << "tcpConnect error" << endl;
            return -1;
        }
        // try to use new connection
        if (rio_writen(sockFd, requestStr.c_str(), requestStr.size()) == -1) {
            cerr << "rio_writen error for requestStr:" << requestStr << endl;
            closesocket(sockFd);
            return -1;
        }
    }

    //// receive http header
    //string headerStr;
    //headerStr.reserve(1024);
    //if(receiveHeader(sockFd, headerStr, DEFAULT_TIMEOUT_SECONDS) <= 0){
    //	cerr << "receiveHeader error" << endl;
    //	closesocket(sockFd);
    //	_preSockFd = -1;
    //	return -1;
    //	}

    //cout << "headerStr:\n" << headerStr << endl;

    //// parser http header
    //httpHeader.setHeaderStr(headerStr);

    //// check StatusCode
    //int stausCode = httpHeader.getStatusCode();
    //if(stausCode == -1){
    //	cerr << "not find status code in httpHeader: " << httpHeader.getHeaderStr() << endl;
    //	}

    //if(stausCode == 301 || stausCode == 302){
    //	closesocket(sockFd);
    //	_preSockFd = -1;
    //	string locationUrlStr = httpHeader.getLocation();
    //	if(locationUrlStr.empty()){
    //		cerr << "error location in httpHeader: " << httpHeader.getHeaderStr() << endl;
    //		}
    //	//locationStr = location;
    //	Url locationUrl(locationUrlStr);
    //	return requestWebPage(locationUrl, httpHeader, httpContent);
    //	}

    //if(stausCode < 200 || stausCode > 299){
    //	closesocket(sockFd);
    //	_preSockFd = -1;
    //	cerr << "status code beyond [200-300) in httpHeader: " << httpHeader.getHeaderStr() << endl;
    //	return -1;
    //	}

    //// check content type
    //string contentType = httpHeader.getContentType();
    //if(contentType.find("image") != string::npos){
    //	closesocket(sockFd);
    //	_preSockFd = -1;
    //	cerr << "contentType is image in httpHeader: " << httpHeader.getHeaderStr() << endl;
    //	return -1;
    //	}

    //// check ContentLength
    //int contentLength = httpHeader.getContentLength();

    //if(contentLength == -1){
    //	//cerr << "contentLength is not finded in httpHeader: " << httpHeader.getHeaderStr() << endl;
    //	contentLength = MAX_HTTPCONTENT_SIZE/10;
    //	}

    //if(contentLength == 0){
    //	closesocket(sockFd);
    //	_preSockFd = -1;
    //	cerr << "contentLength is 0 in httpHeader: " << httpHeader.getHeaderStr() << endl;
    //	return -1;
    //	}

    //if(contentLength  > MAX_HTTPCONTENT_SIZE){
    //	closesocket(sockFd);
    //	_preSockFd = -1;
    //	cerr << "contentLength > MAX_HTTPCONTENT_SIZE in httpHeader: "
    //		<< httpHeader.getHeaderStr() << endl;
    //	return -1;
    //	}

    // receive content
    if (receiveContent(sockFd, expectContentLength, contentStr, DEFAULT_TIMEOUT_SECONDS)
            == -1) {
        closesocket(sockFd);
        _preSockFd = -1;
        cerr << "receiveContent error for url: " << url.getUrlStr() << endl;
        cout << contentStr << endl;
        return -1;
    } else
        _preSockFd = sockFd;

    cout << "contentStr:\n" << contentStr << endl;
    // cout << "content finished,url is:"<<url.getUrlStr()<<endl;
    // set http content
    return 0;
}