int main(int argc, char ** argv){
  int                 conn_s;               /*  connection socket         */
  char                buffer[MAX_LINE];     /*  character buffer          */
  struct sockaddr_in  servaddr;             /*  socket address structure  */

  parse_options(argc, argv, &servaddr);  

  conn_s = tcp_connect(&servaddr);
  
  /*  Read output of server, ask input to user and write input to server */
  Readline(conn_s, buffer, MAX_LINE-1);
  printf("%s", buffer);
  fgets(buffer, MAX_LINE, stdin);
  Writeline(conn_s, buffer, strlen(buffer));
  
  /* Repeat for password */  
  Readline(conn_s, buffer, MAX_LINE-1);
  printf("%s", buffer);
  fgets(buffer, MAX_LINE, stdin);
  Writeline(conn_s, buffer, strlen(buffer));
  
  /* Read authentication response */
  Readline(conn_s, buffer, MAX_LINE-1);
  printf("%s\n", buffer);

  return EXIT_SUCCESS;
}
Esempio n. 2
0
void XHCP_print (int sockd, char *Libelle, ... )
{
    va_list Marker;
    //char msg[256];
    
    int sz_alloc=strlen (Libelle) + 256;
    int sz_msg;
    
    char *msg = (char *)malloc (sz_alloc);
    msg[0]='\0';
    
    /* construction du libelle du message */
    va_start ( Marker, Libelle);
    
    sz_msg=strlen (msg);
    if ( sz_alloc-sz_msg<128 )
    {
        sz_alloc += 128;
        msg = (char *)realloc (msg, sz_alloc);
    }
    vsprintf (msg, Libelle, Marker);
    
    va_end ( Marker);
    
    Writeline (sockd, msg, strlen (msg));
    
    sz_msg=strlen (msg);
    if ( msg[sz_msg-1] != '\n' )
        Writeline (sockd, "\r\n", 2);
    
    free (msg);
}
Esempio n. 3
0
int Return_Error_Msg(int conn, struct ReqInfo * reqinfo) {
	char buffer[100];
	sprintf(buffer, "<HTML>\n<HEAD>\n<TITLE>Server Error %d</TITLE>\n</HEAD>\n\n", reqinfo->status);
	Writeline(conn, buffer, strlen(buffer));
	sprintf(buffer, "<BODY>\n<H1>Server Error %d</H1>\n", reqinfo->status);
	Writeline(conn, buffer, strlen(buffer));
	sprintf(buffer, "<P>The request could not be completed.</P>\n"
			"</BODY>\n</HTML>\n");
	Writeline(conn, buffer, strlen(buffer));
	return 0;
}
Esempio n. 4
0
int Output_HTTP_Headers(int conn, struct ReqInfo * reqinfo) {

    char buffer[100];

    sprintf(buffer, "HTTP/1.0 %d OK\r\n", reqinfo->status);
    Writeline(conn, buffer, strlen(buffer));

    Writeline(conn, "Server: PGWebServ v0.1\r\n", 24);
    Writeline(conn, "Content-Type: text/html\r\n", 25);
    Writeline(conn, "\r\n", 2);

    return 0;
}
Esempio n. 5
0
void sendFileTo(char* message, int to, int from){
	char *file_contents;
	long input_file_size;
	//remove \n at end of string
	message[strlen(message)-1]=0;
	FILE* input_file = fopen(message,"r");

	if(input_file != NULL){
		fseek(input_file, 0, SEEK_END);
		input_file_size = ftell(input_file);
		rewind(input_file);
		file_contents = malloc(input_file_size * (sizeof(char)));
		fread(file_contents, sizeof(char), input_file_size, input_file);
		fclose(input_file);

		char* buf;
		int size = input_file_size+sizeof(message)+MAX_USR_LENGTH + 30;
		char tmp[size];
		memset(tmp,0,size);
		strcat(tmp,"ENDOFFILE");
		strcat(tmp," ; ");
		strcat(tmp,file_contents);

		buf = parseMessage(tmp,strlen(tmp));
		printf("N%s\n",buf);
		printf("Envoie au client : %d\n",to);
		if (Writeline(ctx.socketFd[to], buf, strlen(buf)+1) < 0){
			debugTrace("Message issue");
		}
		else {
			debugTrace("Message sent\n");
		}
		free(buf);
	}
}
Esempio n. 6
0
void sendAll(unsigned char* message, int actuel){

	int i = 0;
	char* buf;
	int size = strlen((char*)message)+MAX_USR_LENGTH + 20;
	char tmp[size];
	for(i=0;i<LISTENQ;i++){
		memset(tmp,0,size);
		if(ctx.socketFd[i] != -1  && (i != actuel)){
			strcat(tmp,usrDatas[actuel].name);
			strcat(tmp," : ");
			strcat(tmp,(char*)message);
			buf = parseMessage(tmp,strlen(tmp));
			printf("Envoie au client : %d\n",i);
			if (Writeline(ctx.socketFd[i], buf, strlen(buf)+1) < 0){
				debugTrace("Message issue");
			}
			else {
				debugTrace("Message sent\n");
			}
			free(buf);
		}

	}
}
Esempio n. 7
0
/*写数据
  入参:pBuf - 存放要写的数据
  	nLen - 数据长度
  	pData - netbuf结构
  出参:成功返回已写的字节数,失败返回-1
*/
int yCFtp::Write (const char *pBuf, int nLen, netbuf *pData)
{
	assert (m_pCtl && pData);
	int i = 0;

	if (pData->nDir != FTPLIB_WRITE)
		return 0;

	if (pData->pBuf)
	{
		i = Writeline (pBuf, nLen, pData);
	}
	else
	{
		Socketwait (pData);
		i = write (pData->nHandle, pBuf, nLen);
	}

	pData->nFered += i;
	if (pData->funIdlecb && pData->nBytes)
	{
		pData->nFeredl += i;
		if (pData->nFeredl > pData->nBytes)
		{
			pData->funIdlecb (pData, pData->nFered, pData->pIdleary);
			pData->nFeredl = 0;
		}
	}

	return i;
}
Esempio n. 8
0
int
NotifyCream(char *buffer, creamConnection_t *connection)
{

	int      retcod;
	struct   pollfd fds[2];

	if (connection->creamfilter == NULL) return -1;
    
	fds[0].fd = connection->socket_fd;
	fds[0].events = ( POLLOUT | POLLPRI | POLLERR | POLLHUP | POLLNVAL ) ;
    
	if(!connection->creamisconn){
		return -1;
	}
	
	retcod = poll(fds, 1, bfunctions_poll_timeout); 
        
	if (retcod < 0) {
		free_cream_connection(connection);
		do_log(debuglogfile, debug, 1, "Fatal Error:Poll error in NotifyCream errno:%d\n",errno);
		sysfatal("Poll error in NotifyCream: %r");
	} else if ( retcod == 0 ) {
		do_log(debuglogfile, debug, 1, "Error:poll() timeout in NotifyCream\n");
		syserror("poll() timeout in NotifyCream: %r");
		return -1;
	} else if ( retcod > 0 ) {
		if (( fds[0].revents & ( POLLERR | POLLNVAL | POLLHUP) )){
			switch (fds[0].revents){
			case POLLNVAL:
				do_log(debuglogfile, debug, 1, "Error:poll() file descriptor error in NotifyCream\n");
				syserror("poll() file descriptor error in NotifyCream: %r");
				return -1;
			case POLLHUP:
				do_log(debuglogfile, debug, 1, "Connection closed in NotifyCream\n");
				syserror("Connection closed in NotifyCream: %r");
				return -1;
			case POLLERR:
				do_log(debuglogfile, debug, 1, "Error:poll() POLLERR in NotifyCream\n");
				syserror("poll() POLLERR in NotifyCream: %r");
				return -1;
			}
		} else {
			Writeline(connection->socket_fd, buffer, strlen(buffer));
			do_log(debuglogfile, debug, 1, "Sent for Cream:%s",buffer);
		} 
	}       

	return 0;

}
Esempio n. 9
0
/* sends a message */
static int music__send(lua_State *L, const char *msg)
{
	char cmsg[1024];
	size_t length;
	int *sock = music__get(L);

	length = strlen(msg);
	memcpy(cmsg, msg, length);
	cmsg[length++] = '\n';
	cmsg[length] = '\0';
	if ((Writeline(*sock, (const void *)cmsg, length)) != (ssize_t)length) {
		return luaL_error(L, "write() failed");
	}
	return 0;
}
Esempio n. 10
0
int processHttpRequest(int sockd, char *buffer)
{
    char *sep = "\n";
    char *line, *brkt;
	char *commande=NULL;
    char *responseBuffer=NULL;
	
	char *header = XPLHAL_ROOT_PAGE_HEAD;
	char *footer = XPLHAL_ROOT_PAGE_TRAIL;


	//for (line = strtok_r(buffer, sep, &brkt); line; line = strtok_r(NULL, sep, &brkt))
	//{
		//responseBuffer = addBuffer (responseBuffer, line);
		//printf("Ligne HTTP : [%s]\n",line);
	//}
	//printf("Buffer : %i car. [%s]\n",strlen(responseBuffer), responseBuffer);
	//responseBuffer = "coucou xPLHal est là !!";
	//XHCP_print (sockd, "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: %i\r\n\r\n%s",strlen(responseBuffer),responseBuffer);
	
	for (line = strtok_r(buffer, sep, &brkt); line; line = strtok_r(NULL, sep, &brkt))
	{
		printf("Ligne HTTP : [%s]\n",line);
		if ( strncmp("cmd=",line,4) == 0)
		{
			commande = strdup(line+4);
			printf("OK cmd trouvé !! [%s]",commande);
		}
	}

	//responseBuffer = XPLHAL_ROOT_PAGE;
	
	if ( commande == NULL )
		commande=strdup("");

	int size = strlen(header) + strlen (footer) + strlen (commande) +10;
	printf("Size = %i\n");
	responseBuffer = malloc (size);

	sprintf(responseBuffer,"%s%s%s", header, commande, footer);

	Writeline (sockd, responseBuffer, strlen(responseBuffer));


	if ( responseBuffer != NULL ) free(responseBuffer);
	if ( commande != NULL ) free(commande);
	return 0;
}
Esempio n. 11
0
int 
GetVersion(const int conn_c)
{

	char *out_buf;

	if ((out_buf = make_message("%s__1\n", VERSION)) != NULL)
	{
		Writeline(conn_c, out_buf, strlen(out_buf));
		do_log(debuglogfile, debug, 1, "Sent Reply for PARSERVERSION command:%s\n",out_buf);
		free(out_buf);
		return 0;
	}
	else
		return 1;
}
Esempio n. 12
0
void XHCP_printMessage (int sockd, int messNum, char *Libelle, ... )
{
    va_list Marker;
    char response_msg[256];
    char *tmp;
    
    sprintf (response_msg, "%d ", messNum);
    tmp = response_msg+strlen (response_msg);
    
    /* construction du libelle du message */
    va_start ( Marker, Libelle);
    vsprintf (tmp, Libelle, Marker);
    va_end ( Marker);
    
    strcat (response_msg, "\r\n");
    
    Writeline (sockd, response_msg, strlen (response_msg));
}
Esempio n. 13
0
///
/// Load a bitstream via the external "ICAP"
///
/// @param bitstream pointer to the bitstream struct
///
void ecap_load(reconos_bitstream_t *bitstream) {
	
	char recv_buf[80];
	ssize_t send_len, recv_len;
	
	send_len = Writeline(conn_s, bitstream->filename, strlen(bitstream->filename));
	CYG_ASSERT(send_len = strlen(bitstream->filename), "Error while writing to ECAP");
	recv_len = Readline(conn_s, recv_buf, 80);

#ifdef UPBDBG_RECONOS_DEBUG
	diag_printf("\t\tECAP says: %s", recv_buf);
#endif        

        if ( recv_buf[0] != 'O' || recv_buf[1] != 'K' ) {
            CYG_FAIL("ecap reconfiguration failed");
        }
		
}
Esempio n. 14
0
void sendTo(char* message, int to, int from){

	char* buf;
	int size = strlen((char*)message)+MAX_USR_LENGTH + 20;
	char tmp[size];
	memset(tmp,0,size);
	strcat(tmp,usrDatas[from].name);
	strcat(tmp," : ");
	strcat(tmp,(char*)message);
	buf = parseMessage(tmp,strlen(tmp));
	printf("Envoie au client : %d\n",to);
	if (Writeline(ctx.socketFd[to], buf, strlen(buf)+1) < 0){
		debugTrace("Message issue");
	}
	else {
		debugTrace("Message sent\n");
	}
	free(buf);
}
Esempio n. 15
0
string cUserVar::EvaluateConnectCmd(const cEvent* e)
{
    if (varparser.connectAddr == "") return "";

    int       conn_s;                /*  connection socket         */
    struct    sockaddr_in servaddr;  /*  socket address structure  */
    char      buffer[MAX_LINE];      /*  character buffer          */

    if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
    {
        LogFile.eSysLog("Error creating listening socket");
        return "";
    }

    memset(&servaddr, 0, sizeof(varparser.connectAddr.c_str()));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_port        = htons(varparser.connectPort);

    if (getAddrFromString(varparser.connectAddr.c_str(), &servaddr) != 0)
    {
        LogFile.eSysLog("Invalid remote address");
        return "";
    }

    if ( connect(conn_s, (struct sockaddr *) &servaddr, sizeof(servaddr) ) < 0 )
    {
        LogFile.eSysLog("Error calling connect()");
        return "";
    }

    varparser.compExpr = varparser.cmdArgs;
    string resexp = EvaluateCompExpr(e, true);
    sprintf(buffer, "%s\n", resexp.c_str());
    Writeline(conn_s, buffer, strlen(buffer));
    Readline(conn_s, buffer, MAX_LINE-1);

    close(conn_s);
    return buffer;
}
Esempio n. 16
0
int 
GetFilter(char *buffer, const int conn_c, char **creamfilter)
{

	int  maxtok;
	char **tbuf;
	char *cp=NULL;
	char * out_buf;

	maxtok = strtoken(buffer,'/',&tbuf);

	if(tbuf[1]){
		*creamfilter = make_message("%s",tbuf[1]);
		if(*creamfilter == NULL){
			sysfatal("strdup failed for creamfilter in GetFilter: %r");
		}
		if ((cp = strrchr (*creamfilter, '\n')) != NULL) {
			*cp = '\0';
		} 
		if ((cp = strrchr (*creamfilter, '\r')) != NULL) {
			*cp = '\0';
		}
		out_buf = make_message("CREAMFILTER set to %s\n", *creamfilter);

	} else {
		out_buf = make_message("CREAMFILTER ERROR\n");
	}
		
	Writeline(conn_c, out_buf, strlen(out_buf));

	do_log(debuglogfile, debug, 1, "Sent Reply for CREAMFILTER command:%s\n",out_buf);

	freetoken(&tbuf,maxtok);
	free(out_buf);
	
	return 0;
}
Esempio n. 17
0
void Writeline(string s) {
	Writeline(lastSockd, s.data(), 0);
}
JNIEXPORT jstring JNICALL Java_de_reiss_nomb_controller_nativecode_NetworkActivity_connecttoserver(
    JNIEnv* env, jobject thiz, jstring serverip, jstring port) {

    __android_log_write(ANDROID_LOG_INFO, LOG_TAG, "<NATIVE SOCKET>");

    const char *nativeServerip = (*env)->GetStringUTFChars(env, serverip, 0);
    __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "Server IP: %s",nativeServerip);
    const char *nativePort = (*env)->GetStringUTFChars(env, port, 0);
    __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "Port: %s",nativePort);



    int sock;
    struct sockaddr_in serv_addr;
    char c;

    sock = (socket(AF_INET, SOCK_STREAM, 0));

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(atoi(nativePort));
    serv_addr.sin_addr.s_addr = inet_addr(nativeServerip);

    // connect to echo server
    if(connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        close(sock);
        char* str = "Connecting to server did not work!\n";
        __android_log_write(ANDROID_LOG_INFO, LOG_TAG, "</NATIVE SOCKET>");
        return (*env)->NewStringUTF(env, str);
    }


    else {

        char* res = "";

        char buffer[100]= "hello from c\n"; // "\n" needed !!!! otherwise server hangs in readLine() ........
        if(Writeline(sock, buffer, strlen(buffer)) < 1) {
            res = "Writing to server did not work!\n";

            close(sock);

            __android_log_write(ANDROID_LOG_INFO, LOG_TAG, "</NATIVE SOCKET>");
            return (*env)->NewStringUTF(env, res);

        } else {
            res = "Writing to server worked! Sent: hello from c\n";

            if(Readline(sock, buffer, 100-1) < 0) {
                char str[100];
                strcpy(str,res);
                strcat(str," Reading from server did not work!\n");
                strcpy(str,buffer);

                close(sock);

                __android_log_write(ANDROID_LOG_INFO, LOG_TAG, "</NATIVE SOCKET>");
                return (*env)->NewStringUTF(env, str);
            }
            else {
                __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "Echo response: %s", buffer);


                char str[256];
                snprintf(str, sizeof str, "%s%s%s", res, " Received: \n", buffer);




                close(sock);

                __android_log_write(ANDROID_LOG_INFO, LOG_TAG, "</NATIVE SOCKET>");
                return (*env)->NewStringUTF(env, str);
            }
        }



    }


}
Esempio n. 19
0
int main(int argc, char *argv[]) {

    int       conn_s;                /*  connection socket         */
    short int port;                  /*  port number               */
    struct    sockaddr_in servaddr;  /*  socket address structure  */
    char      buffer[MAX_LINE];      /*  character buffer          */
    char     *szAddress;             /*  Holds remote IP address   */
    char     *szPort;                /*  Holds remote port         */
    char     *endptr;                /*  for strtol()              */


    /*  Get command line arguments  */

    ParseCmdLine(argc, argv, &szAddress, &szPort);


    /*  Set the remote port  */

    port = strtol(szPort, &endptr, 0);
    if ( *endptr ) {
	printf("ECHOCLNT: Invalid port supplied.\n");
	exit(EXIT_FAILURE);
    }
	

    /*  Create the listening socket  */

    if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
	fprintf(stderr, "ECHOCLNT: Error creating listening socket.\n");
	exit(EXIT_FAILURE);
    }


    /*  Set all bytes in socket address structure to
        zero, and fill in the relevant data members   */

    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_port        = htons(port);


    /*  Set the remote IP address  */

    if ( inet_aton(szAddress, &servaddr.sin_addr) <= 0 ) {
	printf("ECHOCLNT: Invalid remote IP address.\n");
	exit(EXIT_FAILURE);
    }

    
    /*  connect() to the remote echo server  */

    if ( connect(conn_s, (struct sockaddr *) &servaddr, sizeof(servaddr) ) < 0 ) {
	printf("ECHOCLNT: Error calling connect()\n");
	exit(EXIT_FAILURE);
    }


    /*  Get string to echo from user  */

    printf("Enter the string to echo: ");
    fgets(buffer, MAX_LINE, stdin);
    

    /*  Send string to echo server, and retrieve response  */

    Writeline(conn_s, buffer, strlen(buffer));
    Readline(conn_s, buffer, MAX_LINE-1);


    /*  Output echoed string  */

    printf("Echo response: %s\n", buffer);

    return EXIT_SUCCESS;
}
Esempio n. 20
0
int main(int argc, char *argv[]) {
    int       list_s;                /*  listening socket          */
    int       conn_s;                /*  connection socket         */
    short int port;                  /*  port number               */
    struct    sockaddr_in servaddr;  /*  socket address structure  */
    char      buffer[MAX_LINE];      /*  character buffer          */
    char     *endptr;                /*  for strtol()              */

	fprintf(stdout, "Starting ECHOServer.\n");
    /*  Get port number from the command line, and
        set to default port if no arguments were supplied  */

    if ( argc == 2 ) {
		port = strtol(argv[1], &endptr, 0);
		if ( *endptr ) {
			fprintf(stderr, "ECHOSERV: Invalid port number.\n");
			exit(EXIT_FAILURE);
		}
    }else if ( argc < 2 ) {
		port = ECHO_PORT;
    }else{
		fprintf(stderr, "ECHOSERV: Invalid arguments.\n");
		exit(EXIT_FAILURE);
    }

	printf("SysLoadModule(NET)=%d\n", SysLoadModule(SYSMODULE_NET));
    printf("net_init()=%d\n", net_initialize_network());

    /*  Create the listening socket  */

    if ( (list_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
		fprintf(stderr, "ECHOSERV: Error creating listening socket.\n");
		printf("errno: %d\n", errno);
		exit(EXIT_FAILURE);
    }


    /*  Set all bytes in socket address structure to
        zero, and fill in the relevant data members   */

    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port        = htons(port);


    /*  Bind our socket addresss to the 
	listening socket, and call listen()  */

    if ( bind(list_s, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) {
		fprintf(stderr, "ECHOSERV: Error calling bind()\n");
		exit(EXIT_FAILURE);
    }

    if ( listen(list_s, LISTENQ) < 0 ) {
		fprintf(stderr, "ECHOSERV: Error calling listen()\n");
		exit(EXIT_FAILURE);
    }
    char* message = "Welcome to ECHOServer test.\nType exit and hit enter to close app, otherwise type anything you want and hit enter and I will replay it back to you free of charge. :)";
    /*  Enter an infinite loop to respond
        to client requests and echo input  */
	int run = 1;
    while ( run ) {

		/*  Wait for a connection, then accept() it  */

		if ( (conn_s = accept(list_s, NULL, NULL) ) < 0 ) {
			fprintf(stderr, "ECHOSERV: Error calling accept()\n");
			exit(EXIT_FAILURE);
		}

		Writeline(conn_s, message, strlen(message));

		/*  Retrieve an input line from the connected socket
			then simply write it back to the same socket.     */

		Readline(conn_s, buffer, MAX_LINE-1);
		if(strncmp("exit", buffer, 4) == 0)
			run = 0;
		Writeline(conn_s, buffer, strlen(buffer));


		/*  Close the connected socket  */

		if ( closesocket(conn_s) < 0 ) {
			fprintf(stderr, "ECHOSERV: Error calling closesocket()\n");
			exit(EXIT_FAILURE);
		}

    }
	net_finalize_network();
	SysUnloadModule(SYSMODULE_NET);
}
Esempio n. 21
0
int Output_HTTP_Headers(int conn, struct ReqInfo * reqinfo) {
	char buffer[100];
	sprintf(buffer, "HTTP/1.1 %d OK\r\n", reqinfo->status);
	Writeline(conn, buffer, strlen(buffer));
	if(contains(reqinfo->resource,"text/")||contains(reqinfo->resource,"txt/")||contains(reqinfo->resource,"plain/"))
		Writeline(conn, "Content-Type: text/plain; charset=utf-8\r\n");
	else if(contains(reqinfo->resource,"json/")){
		Writeline(conn, "Content-Type: application/json; charset=utf-8\r\n");
		Writeline(conn, "Access-Control-Allow-Origin: *\r\n");// http://quasiris.com
	}
	else if(contains(reqinfo->resource,"csv/"))
		Writeline(conn, "Content-Type: text/plain; charset=utf-8\r\n");
	else if(contains(reqinfo->resource,"tsv/"))
		Writeline(conn, "Content-Type: text/plain; charset=utf-8\r\n");
	else if(contains(reqinfo->resource,"xml/"))
		Writeline(conn, "Content-Type: text/plain; charset=utf-8\r\n");// till entities are fixed
//		Writeline(conn, "Content-Type: application/xml; charset=utf-8\r\n");
	else
		Writeline(conn, "Content-Type: text/html; charset=utf-8\r\n");
	Writeline(conn, "Connection: close\r\n");
	Writeline(conn, "Server: Netbase\r\n");
	Writeline(conn, "\r\n", 2);
//	Writeline(conn, "\r\n", 2);
	return 0;
}
Esempio n. 22
0
void mexFunction(int nlhs,       mxArray *plhs[],
                 int nrhs, const mxArray *prhs[])
{
  char buf[MAXLENGTH];
  char numStr[20];
  double x,y,z,tx,ty,tz;
  double *pwrench,*ploc,*perr,*pind;
  int i,j,numBodies,numContacts;
  int sockd;
  mxArray *wrench,*loc,*err;

  /* Check for proper number of arguments */
  
  if (nrhs > 1) {
    mexErrMsgTxt("get average contacts takes at most one input argument.");
  } else if (nlhs > 3) {
    mexErrMsgTxt("get average contacts takes at most three output arguments.");
  }

  sockd = ConnectTo("localhost",4765);

  if (sockd < 0)
    mexErrMsgTxt("Could not connect");

  // send how many types of date we're collecting
  if (nlhs == 0 ) nlhs=1;
  sprintf(buf,"getContacts %d ",nlhs);

  // if no bodies were specified by user, read total number of bodies
  if (nrhs==0) {
	strcat(buf,"ALL\n");
	Writeline(sockd,buf,strlen(buf));

    Readline(sockd,buf,MAXLENGTH);
    sscanf(buf,"%d\n",&numBodies);
  }
  // otherwise send the body list
  else {
	numBodies = mxGetNumberOfElements(prhs[0]);
	if (numBodies>0) {
	  sprintf(numStr,"%d ",numBodies);
	  strcat(buf,numStr);

	  pind = mxGetPr(prhs[0]);
	  for (i=0;i<numBodies-1;i++) {
	    sprintf(numStr,"%d ",(int)pind[i]-1);
  		strcat(buf,numStr);
	  }
	  sprintf(numStr,"%d\n",(int)pind[i]-1);
	  strcat(buf,numStr);
	  Writeline(sockd,buf,strlen(buf));
	}
  }

  if (numBodies == 0) {
	plhs[0] = NULL;
	plhs[0] = NULL;
  }
  else {
	if (numBodies > 1){
	  for (i=0;i<nlhs;i++)
        plhs[i] = mxCreateCellArray(1,&numBodies);
    }
	
    for (i=0;i<numBodies;i++) {
	  Readline(sockd,buf,MAXLENGTH);
      sscanf(buf,"%d\n",&numContacts);

	  if (numContacts == 0) {
		wrench = mxCreateScalarDouble(0);
		if (nlhs > 1) {loc = mxCreateScalarDouble(0);}
	    if (nlhs > 2) {err = mxCreateScalarDouble(0);}
	  }
	  else {
	    wrench = mxCreateDoubleMatrix(numContacts,6,mxREAL);
	    pwrench = mxGetPr(wrench);
	    if (nlhs > 1) {loc = mxCreateDoubleMatrix(numContacts,3,mxREAL); ploc=mxGetPr(loc);}
	    if (nlhs > 2) {err = mxCreateDoubleMatrix(numContacts,1,mxREAL); perr=mxGetPr(err);}
      }

      for (j=0;j<numContacts;j++) {
        Readline(sockd,buf,MAXLENGTH);
        sscanf(buf,"%lf %lf %lf %lf %lf %lf\n",&x,&y,&z,&tx,&ty,&tz);
        pwrench[j] = x;
        pwrench[numContacts+j] = y;
        pwrench[2*numContacts+j] = z;
        pwrench[3*numContacts+j] = tx;
        pwrench[4*numContacts+j] = ty;
        pwrench[5*numContacts+j] = tz;
		if (nlhs > 1) {
		  Readline(sockd,buf,MAXLENGTH);
		  sscanf(buf,"%lf %lf %lf\n",&x,&y,&z);

  	      ploc[j] = x;
	      ploc[numContacts+j] = y;
	      ploc[2*numContacts+j] = z;
		}
		if (nlhs > 2) {
		  Readline(sockd,buf,MAXLENGTH);
		  sscanf(buf,"%lf\n",perr+j);
        }
	  }
	  if (numBodies == 1) {
		plhs[0] = wrench;
        if (nlhs > 1) plhs[1] = loc;
        if (nlhs > 2) plhs[2] = err;
	  } else {
	    mxSetCell(plhs[0],i,wrench);
	    if (nlhs > 1) mxSetCell(plhs[1],i,loc);
	    if (nlhs > 2) mxSetCell(plhs[2],i,err);
	  }
	}
  }

  CloseConnection(sockd);
  return;

}
Esempio n. 23
0
/* CENTRAL METHOD to parse and render html request*/
int handle(cchar* q0,int conn){
	int len=(int)strlen(q0);
	if(len>1000){
		p("checkSanity len>1000");
		return 0;// SAFETY!
	}
    char* q=editable(q0);
	checkSanity(q,len);
    while(q[0]=='/')q++;
	enum result_format format = html;//txt; html DANGER WITH ROBOTS
	enum result_verbosity verbosity = normal;

	if (eq(q, "favicon.ico"))return 0;
    if(contains(q,"robots.txt")){
        Writeline(conn,"User-agent: *\n");
        Writeline("Disallow: /\n");
        return 0;
    }
	
	char* jsonp=strstr(q,"jsonp");// ?jsonp=fun
	if(jsonp){
		jsonp[-1]=0;
		jsonp+=6;
		format = json;
		}
	else jsonp=(char*)"parseResults";

	if (endsWith(q, ".json")) {
        format = json;
        q[len-5]=0;
    }
    
	if (endsWith(q, ".xml")) {
        format = xml;
        q[len-4]=0;
    }
    
	if (endsWith(q, ".csv")||endsWith(q, ".tsv")) {
        format = csv;
        q[len-4]=0;
    }
    
	if (endsWith(q, ".txt")) {
        format = txt;
        q[len-4]=0;
    }
    
	if (endsWith(q, ".html")) {
		format = html;
		q[len-5]=0;
	}
	if (startsWith(q, ".js")) {
		q[len-3]=0;
		Writeline(conn, jsonp);
		Writeline(conn, "(");
		format = js;
	}
	// todo : dedup!!
	if (startsWith(q, "all/")) {
		cut_to(q," +");
		cut_to(q," -");
		q = q + 4;
		showExcludes=false;
		verbosity = alle;
	}
	if (startsWith(q, "long/")){
		verbosity =  longer;
		q = q + 5;
	}
	if (startsWith(q, "full/")) {
		verbosity =  verbose;
		q = q + 5;
	}
	if (startsWith(q, "verbose/")) {
		verbosity = verbose;
		q = q + 8;
	}
	if (startsWith(q, "short/")) {
		verbosity = shorter;
		q = q + 6;
	}

	if (startsWith(q, "html/")) {
        format = html;
        if(!contains(q,".")&&!contains(q,":"))
			verbosity=verbose;
        q = q + 5;
    }
	if (startsWith(q, "plain/")) {
		format = txt;
		q = q + 6;
	}
	if (startsWith(q, "text/")) {
		format = txt;
		q = q + 5;
	}
	if (startsWith(q, "txt/")) {
		format = txt;
		q = q + 4;
	}
	if (startsWith(q, "xml/")) {
		format = xml;
		q = q + 4;
	}
	if (startsWith(q, "csv/")||startsWith(q, "tsv/")) {
		format = csv;
		q = q + 4;
	}
	if (startsWith(q, "json/")) {
		format = json;
		q = q + 5;
	}
	if (startsWith(q, "js/")) {
		q = q + 3;
		Writeline(conn, jsonp);
		Writeline(conn, "(");
		format = js;
	}
	if (startsWith(q, "long/")) {
		verbosity = longer;
		q = q + 5;
	}
	if (startsWith(q, "verbose/")) {
		verbosity = verbose;
		q = q + 8;
	}
	if (startsWith(q, "short/")) {
		verbosity = shorter;
		q = q + 6;
	}
	if (startsWith(q, "excludes/")||startsWith(q, "includes/")||startsWith(q, "excluded/")||startsWith(q, "included/")||startsWith(q, "showview/")) {
        showExcludes=true;
        verbosity=longer;
		q = q + 9;
	}
    else showExcludes=false;
    excluded.clear();
    included.clear();
    
    if(contains(q,"statement count")){Writeline(conn,itoa((int)context->statementCount).data());return 0;}
    if(contains(q,"node count")){Writeline(conn,itoa(context->nodeCount).data());return 0;}
    
    
	if (startsWith(q, "all/")) {
        cut_to(q," +");
        cut_to(q," -");
		q = q + 4;
		showExcludes=false;
		verbosity = alle;
	}
//	bool get_topic=false;
	bool get_topic=true;
	bool sort=false;
	if (startsWith(q, "ee/")||startsWith(q, "ee ")) {
		q[2]=' ';
		get_topic=true;
	}
	if (startsWith(q, "entities/")) {
		q[8]=' ';
		get_topic=true;
//		verbosity=longer;
	}
	if(hasWord(q)) loadView(q);
    
    if(contains(q,"exclude")||contains(q,"include")){
        verbosity=normal;
        showExcludes=true;
    }
	p(q);
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!
	//
    NodeVector all = parse(q); // <<<<<<<< HANDLE QUERY WITH NETBASE!
    //
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!

	autoIds=false;
    int size=(int)all.size();
    if(showExcludes){
        for (int i = 0; i < size; i++) {
        // todo : own routine!!!
        Node* node = (Node*) all[i];
        if(!contains(all,getAbstract(node->name)))
            all.push_back(getAbstract(node->name));
        N parent= getType(node);
        if(parent){
            if(!contains(all,parent))all.push_back(parent);
            N abs= getAbstract(parent->name);
            if(parent&&!contains(all,abs))all.push_back(abs);
        }
        }
        show(excluded);
    }
    
    const char* html_block="<!DOCTYPE html><html><head><META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=UTF-8'/></head>"\
							"<body><div id='netbase_results'></div>\n<script>var results=";
    //    if((int)all.size()==0)Writeline("0");
	//	Writeline(conn,q);
	char buff[10000];

	bool use_json= format == json || format == js || format == html;
	if (format == xml && (startsWith(q,"select")||contains(q," where "))){Writeline(conn,query2(q));return 0;}
	if (format == xml)Writeline(conn, "<results>\n");
	if (format == html)Writeline(conn,html_block);
	if (use_json)Writeline(conn, "{\"results\":[\n");
	const char* statement_format_xml = "   <statement id='%d' subject=\"%s\" predicate=\"%s\" object=\"%s\" sid='%d' pid='%d' oid='%d'/>\n";
	const char* statement_format_text = "   $%d %s %s %s %d->%d->%d\n";
	const char* statement_format_json = "      { \"id\":%d, \"subject\":\"%s\", \"predicate\":\"%s\", \"object\":\"%s\", \"sid\":%d, \"pid\":%d, \"oid\":%d}";
	const char* statement_format_csv = "%d\t%s\t%s\t%s\t%d\t%d\t%d\n";
	const char* statement_format = 0;
	if (format == xml)statement_format = statement_format_xml;
	if (format == html)statement_format = statement_format_json;
	if (format == json)statement_format = statement_format_json;
	if (format == txt)statement_format = statement_format_text;
	if (format == csv)statement_format = statement_format_csv;
    
	const char* entity_format = 0;
	const char* entity_format_txt = "%s #%d (statements:%d) %s\n";
	const char* entity_format_xml = "<entity name=\"%s\" id='%d' statementCount='%d' description='%s'>\n";
	const char* entity_format_json = "   {\"name\":\"%s\", \"id\":%d, \"statementCount\":%d, \"description\":\"%s\"";
   	const char* entity_format_csv = "%s\t%d\t%d\t%s\n";
    if(all.size()==1)entity_format_csv = "";//statements!
	if (format == xml)entity_format = entity_format_xml;
	if (format == txt)entity_format = entity_format_txt;
	if (format == csv)entity_format = entity_format_csv;
	if (use_json)	  entity_format = entity_format_json;
	Node* last=0;
    warnings=0;
    char* entity=0;
    if(startsWith(q,"all")){
        entity=(char*)cut_to(q," ");
        entity=keep_to(entity,"limit");
    }
   	sortNodes(all);
	int count=(int)all.size();
	int good=0;
	for (int i = 0; i < count && i<resultLimit; i++) {
		Node* node = (Node*) all[i];
		if(!checkNode(node))continue;
		if(node->id==0)continue;
		if(last==node)continue;
		if(eq(node->name,"◊"))continue;
		last=node;
        if(verbosity ==normal && entity&& eq(entity,node->name))continue;
		char* text=getText(node);
//		if(use_json && get_topic){
//			if(empty(text))continue;//! no description = no entity? BAD for amazon etc
//			if(isAbstract(node))continue;
//			N t=getTopic(node);
//		}
		good++;
		if (use_json)if(good>1)Writeline(conn, "},\n");
		sprintf(buff, entity_format, node->name, node->id,node->statementCount,text);
		Writeline(conn, buff);
//        if(verbosity != alle && !get_topic)
//			loadView(node);
		bool got_topic=false;
		if(use_json && get_topic){
			N c=getClass(node);
			N t=getTopic(node);
			N ty=getType(node);
//			if(!c)c=t;
			if(!t)t=ty;
			if(t==node)t=ty;
			if(t!=Entity && checkNode(t)){
				got_topic=true;
				Writeline(conn, ",\n\t \"topicid\":"+itoa(t->id));
				Writeline(conn, ", \"topic\":\""+string(t->name)+"\"");
			}
			if(c && c!=t){
				Writeline(conn, ",\n\t \"classid\":"+itoa(c->id));
				Writeline(conn, ", \"class\":\""+string(c->name)+"\"");
			}
			if(ty&& c!=ty && ty!=t){
				Writeline(conn, ",\n\t \"typeid\":"+itoa(ty->id));
				Writeline(conn, ", \"type\":\""+string(ty->name)+"\"");
			}
		}
		if(use_json)// && (verbosity==verbose||verbosity==shorter))// lol // just name
			Writeline(conn, ", \"kind\":"+itoa(node->kind));
		if((use_json)&&!showExcludes&&node->statementCount>1 && getImage(node)!="")
			Writeline(", \"image\":\""+replace_all(replace_all(getImage(node,150,/*thumb*/true),"'","%27"),"\"","%22")+"\"");
//		if((use_json)&&getText(node)[0]!=0)
//			Writeline(", \"description\":\""+string(getText(node))+"\"");
		Statement* s = 0;
		if (format==csv|| verbosity == verbose || verbosity == longer|| verbosity == alle || showExcludes || ( all.size() == 1 && !(verbosity == shorter))) {
			int count=0;
            //            Writeline(",image:\""+getImage(node->name)+"\"");
			if (use_json)Writeline(conn, ",\n\t \"statements\":[\n");

//			sortStatements(
			deque<Statement*> statements;// sort
			while ((s = nextStatement(node, s))&&count++<lookupLimit){// resultLimit
				if (!checkStatement(s))break;
//				if(!got_topic &&( s->predicate==_Type|| s->predicate==_SuperClass)){
//					addStatementToNode(node, s->id(), true);// next time
//				}
				if(get_topic &&!got_topic && verbosity != verbose && (s->predicate>100 || s->predicate<-100))
					continue;// only important stuff here!
				// filter statements

				if(s->object==0)continue;
//				if(eq(s->Predicate()->name,"Offizielle Website") && !contains(s->Object()->name,"www"))
//					continue;
				if (s->subject==node->id and s->predicate!=4)//_instance
					statements.push_front(s);
				else statements.push_back(s);
			}
//			if(get_topic && verbosity!=shorter){
//				NV topics=getTopics(node);
//				N s=topics[0];
//				for (int j = 0; j < topics.size() && j<=resultLimit; j++) {
//					N s=topics[j];
//					Temporary statement (node,topic,s)
//					statements.push_front(s);
//				}
//			}




			int good=0;
			for (int j = 0; j < statements.size() && j<=resultLimit; j++) {
				s=statements.at(j);
//			while ((s = nextStatement(node, s))&&count++<resultLimit) {
                if(format==csv&&all.size()>1)break;// entities vs statements
                p(s);
				if(verbosity!=alle&&checkHideStatement(s)){warnings++;continue;}
				fixLabels(s);
				if(!(verbosity==verbose||verbosity==alle) && (s->Predicate()==Instance||s->Predicate()==Type))continue;
				if(use_json && good>0)Writeline(conn, ",\n");
				char* objectName=s->Object()->name;

				if(s->Predicate()==Instance){
					N type=findProperty(s->Object(),Type->name,0,50);
					if(  checkNode(type))
						objectName=(char*)(concat(concat(objectName, ": "),type->name));
				}
				sprintf(buff, statement_format, s->id(), s->Subject()->name, s->Predicate()->name, objectName, s->Subject()->id, s->Predicate()->id, s->Object()->id);
				Writeline(conn, buff);
				good++;
			}
			if (use_json)Writeline(conn, "]");
		}
		if (format == xml)Writeline(conn, "</entity>\n");
		//		string img=getImage(node->name);
		//		if(img!="")Writeline(conn,"<img src=\""+img+"\"/>");
	}

	if (use_json || format == html || format == js)Writeline(conn,good>0?"}\n]}":"]}");
	if (format == xml)Writeline(conn, "</results>\n");
	if(format == js)Writeline(conn, ")");// jsonp
		const char* html_end=";\n</script>\n<script src='http://pannous.net/netbase.js'></script></body></html>\n";
	if(format == html)Writeline(conn, html_end);
	//		sprintf(buff,	"<script src='/js/%s'></script>",q0);
	//		Writeline(conn, buff);
	//	}
    pf("Warnings/excluded: %d\n",warnings);
    return 0;// 0K
}
Esempio n. 24
0
/*  Write a line to a socket  */
ssize_t Writeline(int sockd, string s) {
	return Writeline(sockd, s.data(), s.length());
}
Esempio n. 25
0
void Writeline(const char* s) {
	Writeline(lastSockd, s, 0);
}
Esempio n. 26
0
int main(int argc, char *argv[]) {
    int       list_s;                /*  listening socket          */
    int       conn_s;                /*  connection socket         */
    short int port;                  /*  port number               */
    struct    sockaddr_in servaddr;  /*  socket address structure  */
    char      buffer[MAX_LINE];      /*  character buffer          */
    char     *endptr;                /*  for strtol()              */


    /*  Get port number from the command line, and
        set to default port if no arguments were supplied  */

    if ( argc == 2 ) {
	port = strtol(argv[1], &endptr, 0);
	if ( *endptr ) {
	    fprintf(stderr, "ECHOSERV: Invalid port number.\n");
	    exit(EXIT_FAILURE);
	}
    }
    else if ( argc < 2 ) {
	port = ECHO_PORT;
    }
    else {
	fprintf(stderr, "ECHOSERV: Invalid arguments.\n");
	exit(EXIT_FAILURE);
    }

	
    /*  Create the listening socket  */

    if ( (list_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
	fprintf(stderr, "ECHOSERV: Error creating listening socket.\n");
	exit(EXIT_FAILURE);
    }


    /*  Set all bytes in socket address structure to
        zero, and fill in the relevant data members   */

    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port        = htons(port);


    /*  Bind our socket addresss to the 
	listening socket, and call listen()  */

    if ( bind(list_s, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) {
	fprintf(stderr, "ECHOSERV: Error calling bind()\n");
	exit(EXIT_FAILURE);
    }

    if ( listen(list_s, LISTENQ) < 0 ) {
	fprintf(stderr, "ECHOSERV: Error calling listen()\n");
	exit(EXIT_FAILURE);
    }

    
    /*  Enter an infinite loop to respond
        to client requests and echo input  */

    while ( 1 ) {

	/*  Wait for a connection, then accept() it  */

	if ( (conn_s = accept(list_s, NULL, NULL) ) < 0 ) {
	    fprintf(stderr, "ECHOSERV: Error calling accept()\n");
	    exit(EXIT_FAILURE);
	}


	/*  Retrieve an input line from the connected socket
	    then simply write it back to the same socket.     */

	Readline(conn_s, buffer, MAX_LINE-1);
	Writeline(conn_s, buffer, strlen(buffer)); 


	/*  Close the connected socket  */

	if ( close(conn_s) < 0 ) {
	    fprintf(stderr, "ECHOSERV: Error calling close()\n");
	    exit(EXIT_FAILURE);
	}
    }
}
Esempio n. 27
0
int main(int argc, char *argv[]) {

    fd_set read_selector;			 //read selection
    int ret;
    int i = 0;
    int messageSize;

    initServer(argc, argv);

    /*  Enter an infinite loop to respond
        to client requests and echo input  */

    while ( 1 ) {

        FD_ZERO(&read_selector);
    //    	Update FD's : En sortie, les ensembles sont modifiés pour  indiquer  les
    //    	descripteurs qui ont changé de statut.
    	 /* Remember the main socket */
        FD_SET(ctx.mainSocket,&read_selector);
    	for(i=0;i<LISTENQ;i++){
    		if(ctx.socketFd[i] != -1){
    			FD_SET(ctx.socketFd[i],&read_selector);
    		}
    	}

    	ret = select(FD_SETSIZE,&read_selector,(fd_set *)NULL,(fd_set *)NULL,NULL);
    	if(ret > 0){
			if(FD_ISSET(ctx.mainSocket,&read_selector)){ //main socket
				debugTrace("New connection detected\n");
				/*  Wait for a connection, then accept() it  */
				int sock = accept(ctx.mainSocket, NULL, NULL);
				if(sock == -1) {
					fprintf(stderr, "ECHOSERV: Error calling accept()\n%s", strerror(errno));
					exit(EXIT_FAILURE);
				}
				debugTrace("New connection established\n");

				for(i=0;i<LISTENQ;i++){
					if(ctx.socketFd[i] == -1){
							ctx.socketFd[i]=sock;
							FD_SET(ctx.socketFd[i],&read_selector);
							setUserDatas(i);
							break;
					}
				}
			}
			else{//client
				//effectuer une lecture des FDs avec une rotation sinon c'est toujours le premier client qui aura le token
//				i = ((i+1) % LISTENQ);
				for(i=0;i<LISTENQ;i++){
					if(ctx.socketFd[i] != -1 && FD_ISSET(ctx.socketFd[i],&read_selector)){
						debugTrace("New message incoming");
						messageSize = Readline(ctx.socketFd[i], ctx.messageToReceive, MAX_LINE-10);
						if(messageSize <= 0){
							printError(messageSize);
							deconnectClient(ctx.socketFd[i]);
							FD_CLR(ctx.socketFd[i],&read_selector);
							ctx.socketFd[i] = -1;
							break;
						}
						debugTrace("Reading done");
						ctx.messageToSend = doAction((unsigned char*)ctx.messageToReceive,ctx.messageToSend,i);
						debugTrace("Analyze done");
						//Le message a déjà été envoyé
						if(strcmp(ctx.messageToSend,"sentToALl")){
							ctx.parsedMessage = parseMessage(ctx.messageToSend,strlen(ctx.messageToSend));
							debugTrace("Parsing");
							printf("msg : %s\n",ctx.parsedMessage);
							if (Writeline(ctx.socketFd[i], ctx.parsedMessage, strlen(ctx.parsedMessage)+1) < 0){
								debugTrace("Message issue");
							}
							else
								debugTrace("Message sent\n");
						}

					}
				}
				printf("Over\n");
			}
    	}
    	else{
    		debugTrace("nothing to read");
    	}
    }

    free(ctx.messageToReceive);

    /*  Close the connected socket  */
    for(i=0;i<LISTENQ;i++){
    	if ( close(ctx.socketFd[i]) < 0 ) {
			fprintf(stderr, "ECHOSERV: Error calling close()\n");
			exit(EXIT_FAILURE);
			debugTrace("LE CLIENT IS DEAD !\n");
		}
    }

}
Esempio n. 28
0
//do something according to buffer's datas
//commande : PUSH, GET, LIST, CONNECT,
char* doAction(unsigned char* buffer, char* messageToSend, int actuel) {

	char* help = "Command list :\nhelp\tsend\tpush\texit";
	char* ukCommand = "Unknown command";
	char* receptionOk = "Well received";
	char* sentToAll = "sentToALl";
	char* failed = "failed";
	int i = 0;

	if((strcmp((char*)buffer,"help\n") == 0)){
		debugTrace("Help");
		return help;
	}
	else if((strcmp((char*)buffer,"list\n") == 0)){
		debugTrace("List");
		for(i=0;i<LISTENQ;i++){
			if (ctx.socketFd[i] != -1 && Writeline(ctx.socketFd[actuel], usrDatas[i].name, strlen(usrDatas[i].name)+1) < 0){
				debugTrace("Message issue");
			}
		}
		return sentToAll;
	}
	else if(strstr((char*)buffer,"push") != NULL){
		debugTrace("push");
		buffer+=5;
		char* name;
		char* sv;
		name = strtok_r((char*)buffer," ",&sv);
		for(i=0;i<LISTENQ;i++){
			if(!strcmp(name,usrDatas[i].name)){
				sendFileTo(sv,i,actuel);
				return sentToAll;
			}
		}
		return failed;
	}
	else if(strstr((char*)buffer,"send") != NULL){  //command exemple : send coco channel
		buffer+=5; //glide pointer to message (send ) carefull, dont forget the blankspace
		if(buffer[0] == '-' && buffer[1] == 'a'){
			buffer+=2;
			debugTrace("Sending to everyone");
			sendAll(buffer,actuel);
			return sentToAll;
		}
		char* name;
		char* sv;
		name = strtok_r((char*)buffer," ",&sv);

		for(i=0;i<LISTENQ;i++){
			if(!strcmp(name,usrDatas[i].name)){
				sendTo(sv,i,actuel);
				return sentToAll;
			}
		}
		return receptionOk;
	}
	else{
		debugTrace("UnknownCommand");
		return ukCommand;
	}
}
Esempio n. 29
0
static void handleclient(u64 conn_s_p)
{
	int conn_s = (int)conn_s_p;
	int list_s_data = -1;
	int conn_s_data = -1;
	
	char	cwd[2048];
	char	login_user[32];
	char	login_pass[64];
	char	rename_from[2048];
	u32	rest = 0;
	int	authd = 0;
	
	char	message[4096];
	char	buffer[2048];
	
	sprintf(cwd, "/");
	
	sprintf(message, "220-OpenPS3FTP by @jjolano\r\n");
	Writeline(conn_s, message, strlen(message));
	
	sprintf(message, "220 Version %s\r\n", VERSION);
	Writeline(conn_s, message, strlen(message));
	
	while(program_running == 1)
	{
		sys_ppu_thread_yield();
		
		if(Readline(conn_s, buffer, 2047) == 0 || strncmp(buffer, "QUIT", 4) == 0 || strncmp(buffer, "BYE", 3) == 0)
		{
			break;
		}
		
		buffer[strcspn(buffer, "\n")] = '\0';
		buffer[strcspn(buffer, "\r")] = '\0';
		
		if(strncmp(buffer, "USER", 4) == 0)
		{
			if(strlen(buffer) > 7)
			{
				strcpy(login_user, buffer+5);
				
				sprintf(message, "331 Username %s OK. Password required\r\n", login_user);
				Writeline(conn_s, message, strlen(message));
			}
			else
			{
				sprintf(message, "430 No username specified\r\n");
				Writeline(conn_s, message, strlen(message));
			}
		}
		else if(strncmp(buffer, "PASS", 4) == 0)
		{
			if(strlen(buffer) > 7)
			{
				strcpy(login_pass, buffer+5);
				
				if(strcmp(LOGIN_USERNAME, login_user) == 0 && strcmp(LOGIN_PASSWORD, login_pass) == 0)
				{
					authd = 1;
					sprintf(message, "230 Successful authentication\r\n");
				}
				else
				{
					sprintf(message, "430 Invalid username or password\r\n");
					Writeline(conn_s, message, strlen(message));
				}
			}
			else
			{
				sprintf(message, "430 Invalid username or password\r\n");
			}
			
			Writeline(conn_s, message, strlen(message));
		}
		else if(authd == 0)
		{
			sprintf(message, "530 Not logged in\r\n");
			Writeline(conn_s, message, strlen(message));
		}
		else if(strncmp(buffer, "FEAT", 4) == 0)
		{
			sprintf(message, "211-Extensions supported:\r\n");
			Writeline(conn_s, message, strlen(message));
			
			sprintf(message, " SIZE\r\n");
			Writeline(conn_s, message, strlen(message));
			sprintf(message, " PASV\r\n");
			Writeline(conn_s, message, strlen(message));
			
			
			sprintf(message, "211 End\r\n");
			Writeline(conn_s, message, strlen(message));
		}
		else if(strncmp(buffer, "TYPE", 4) == 0)
		{
			sprintf(message, "200 TYPE is now %s\r\n", buffer+5);
			Writeline(conn_s, message, strlen(message));
		}
		else if(strncmp(buffer, "PORT", 4) == 0)
		{
			rest = 0;
			
			char connectinfo[24];
			strcpy(connectinfo, buffer+5);
			
			char data[7][4];
			int len = strlen(connectinfo);
			int i, x = 0, y = 0;
			
			for(i = 0;i < len;i++)
			{
				if(connectinfo[i] == ',')
				{
					data[x][y] = '\0';
					x++;
					y = 0;
				}
				else
				{
					data[x][y] =  connectinfo[i];
					y++;
				}
			}
			
			char conn_ipaddr[16];
			sprintf(conn_ipaddr, "%s.%s.%s.%s", data[0], data[1], data[2], data[3]);

			int p1 = atoi(data[4]);
			int p2 = atoi(data[5]);
			
			short int conn_port = (p1 * 256) + p2;
			
			netClose(conn_s_data);
			netClose(list_s_data);
			
			list_s_data = -1;
			conn_s_data = netSocket(AF_INET, SOCK_STREAM, 0);
			
			struct sockaddr_in servaddr;
			memset(&servaddr, 0, sizeof(servaddr));
			servaddr.sin_family	= AF_INET;
			servaddr.sin_port	= htons(conn_port);
			inet_pton(AF_INET, conn_ipaddr, &servaddr.sin_addr);
			
			if(connect(conn_s_data, (struct sockaddr *)&servaddr, sizeof(servaddr)) == 0)
			{
				sprintf(message, "200 PORT command successful\r\n");
				Writeline(conn_s, message, strlen(message));
				continue;
			}
			
			sprintf(message, "425 Internal Error\r\n");
			Writeline(conn_s, message, strlen(message));
		}
		else if(strncmp(buffer, "PASV", 4) == 0)
		{
			rest = 0;
			netSocketInfo snf;
			
			int ret = netGetSockInfo(conn_s, &snf, 1);
			
			if(ret >= 0 && snf.local_adr.s_addr != 0)
			{
				netClose(conn_s_data);
				netClose(list_s_data);
				
				conn_s_data = -1;
				list_s_data = -1;
				
				// create the socket
				list_s_data = netSocket(AF_INET, SOCK_STREAM, 0);

				// calculate the passive mode port
				//srand((unsigned)time(NULL));
				//srand((unsigned)time(NULL) + rand());
				
				int rand1 = 4 + rand() % 255;
				int rand2 = rand() % 256;
				
				short int port = (rand1 * 256) + rand2;
				
				struct sockaddr_in servaddr;
				memset(&servaddr, 0, sizeof(servaddr));
				servaddr.sin_family      = AF_INET;
				servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
				servaddr.sin_port        = htons(port);
				
				// bind address to listener, listen, and accept
				netBind(list_s_data, (struct sockaddr *) &servaddr, sizeof(servaddr));
				netListen(list_s_data, LISTENQ);
				sprintf(message, "227 Entering Passive Mode (%u,%u,%u,%u,%i,%i)\r\n",
					(snf.local_adr.s_addr & 0xFF000000) >> 24,
					(snf.local_adr.s_addr & 0xFF0000) >> 16,
					(snf.local_adr.s_addr & 0xFF00) >> 8,
					(snf.local_adr.s_addr & 0xFF),
					rand1, rand2);
				
				Writeline(conn_s, message, strlen(message));
						
				if((conn_s_data = netAccept(list_s_data, NULL, NULL)) < 0)
				{
					printf("warning: failed to accept a connection\n");
					netClose(conn_s_data);
					netClose(list_s_data);
					
					conn_s_data = -1;
					list_s_data = -1;
				}
				else
				{
					// PASV success
					continue;
				}
			}
		
		sprintf(message, "425 Internal Error\r\n");
		Writeline(conn_s, message, strlen(message));
		}
Esempio n. 30
0
void mexFunction(int nlhs,       mxArray *plhs[],
                 int nrhs, const mxArray *prhs[])
{
  char buf[MAXLENGTH];
  char numStr[20];
  double value;
  double *pvals,*pind;
  int i,j,numRobots,numDOF;
  int sockd;
  mxArray *vals;

  /* Check for proper number of arguments */
  
  if (nrhs > 1) {
    mexErrMsgTxt("getDOFVals takes at most one input argument.");
  } else if (nlhs > 1) {
    mexErrMsgTxt("getDOFVals takes one output argument.");
  }
  if (nlhs == 0 ) nlhs=1;

  sockd = ConnectTo("localhost",4765);

  if (sockd < 0)
    mexErrMsgTxt("Could not connect");
 
  strcpy(buf,"getDOFVals ");

  // if no robots were specified by user, read total number of robots
  if (nrhs==0) {
	strcat(buf,"ALL\n");
	Writeline(sockd,buf,strlen(buf));

    Readline(sockd,buf,MAXLENGTH);
    sscanf(buf,"%d\n",&numRobots);
  }
  // otherwise send the body list
  else {
	numRobots = mxGetNumberOfElements(prhs[0]);
	if (numRobots>0) {
	  sprintf(numStr,"%d ",numRobots);
	  strcat(buf,numStr);

	  pind = mxGetPr(prhs[0]);
	  for (i=0;i<numRobots-1;i++) {
	    sprintf(numStr,"%d ",(int)pind[i]-1);
  		strcat(buf,numStr);
	  }
	  sprintf(numStr,"%d\n",(int)pind[i]-1);
	  strcat(buf,numStr);
	  Writeline(sockd,buf,strlen(buf));
	}
  }

  if (numRobots == 0) {
	plhs[0] = NULL;
	plhs[0] = NULL;
  }
  else {
	if (numRobots > 1){
	  for (i=0;i<nlhs;i++)
        plhs[i] = mxCreateCellArray(1,&numRobots);
    }
	
    for (i=0;i<numRobots;i++) {
	  Readline(sockd,buf,MAXLENGTH);
	   if (!strncmp(buf,"Error",5)) {
		mexErrMsgTxt(buf);
		break;
	  }

      sscanf(buf,"%d\n",&numDOF);
	  sprintf(buf,"NumDOF read: %d",numDOF);

	  if (numDOF == 0) {
		vals = mxCreateScalarDouble(0);
	  }
	  else {
	    vals = mxCreateDoubleMatrix(numDOF,1,mxREAL);
	    pvals = mxGetPr(vals);
      }
      for (j=0;j<numDOF;j++) {
        Readline(sockd,buf,MAXLENGTH);
        sscanf(buf,"%lf\n",&value);
        pvals[j] = value;
	  }
	  if (numRobots == 1) {
		plhs[0] = vals;
	  } else {
	    mxSetCell(plhs[0],i,vals);
	  }
	}
  }

  CloseConnection(sockd);
  return;
}