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; }
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); }
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; }
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; }
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); } }
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); } } }
/*写数据 入参: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; }
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; }
/* 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; }
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; }
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; }
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)); }
/// /// 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"); } }
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); }
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; }
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; }
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); } } } }
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; }
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); }
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; }
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; }
/* 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 }
/* Write a line to a socket */ ssize_t Writeline(int sockd, string s) { return Writeline(sockd, s.data(), s.length()); }
void Writeline(const char* s) { Writeline(lastSockd, s, 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); } } }
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"); } } }
//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; } }
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)); }
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; }