int ftp_receive_file(char *filename, char *command) { int rc,state; int dtp=E_REFUSE; if (ftp_use_port!='Y') { dtp = ftp_passive_connect(); } /* if (dtp==E_REFUSE) { dtp = ftp_listen_connect(); } */ if (dtp==E_REFUSE) { dtp = ftp_port_connect(); } if (dtp>=0) { rc = news_send_command( fpi, command ); /* rc=CNbyte_count(dtp); fprintf( log, "Pre-Listen CNbyte_count returns %d, %s \n", rc, get_err_text(rc)); */ if (CNbyte_count( dtp )==E_LISTEN) { if ((state=ftp_listen( dtp ))>=0) { state = E_NORMAL; } } else { state = TCP_wait_state( dtp, TESTABLISH, 15 ); } if (state==E_NORMAL) { rc = ftp_receive_continuations( fpi, "dummy", FALSE ); rc = news_receive( dtp, filename, 2 ); } else { fprintf( log, "TCP_wait_state returns %s \n", get_err_text(state)); rc=CNbyte_count(dtp); fprintf( log, "CNbyte_count returns %d, %s \n", rc, get_err_text(rc)); rc = state; } TCP_close( dtp, 5 ); /* wait for connection to close */ } else { fprintf( log, "open_connection returns %s \n", get_err_text(dtp)); rc = dtp; } return(rc); }
int16 lprConnect(char* host) { CAB cab; int16 tcpHndl, state; /* remote and local port numbers for lpr connection */ cab.rport = LPR_REM_PORT; cab.lport = LPR_LOC_PORT+(int)(Random() % 10); cab.lhost = 0; if (resolve(host, NULL, &(cab.rhost), 1) < 1) { uiPrintf(uiH, uiPrERR, "unknown remote host"); return 0; } if( (tcpHndl = TCP_open((uint32)&cab, TCP_ACTIVE, 0, tcpBuffSize)) <= 0 ) { uiPrintf(uiH, uiPrERR, "could not open connection"); return 0; } if ( (state = TCP_wait_state(tcpHndl, TESTABLISH, 30)) < 0 ) { uiPrintf(uiH, uiPrERR, "%s", get_err_text(state)); return 0; } return tcpHndl; }
void test01(WORD testNo, char *testName, BYTE tcpNotUdp, DWORD *blockSizes, WORD blockSizesCount) { DWORD start = getTicks(); //---------- out_test_header(testNo, testName); // show test header //---------- // find out the largest block size int i; int maxBlockSize = 0; for(i=0; i<blockSizesCount; i++) { if(maxBlockSize < (int)blockSizes[i]) { // if current max block size is smaller than this block size, store it maxBlockSize = blockSizes[i]; } } //---------- // open socket int handle; if(tcpNotUdp) { handle = TCP_open(SERVER_ADDR, SERVER_PORT_START, 0, maxBlockSize); } else { handle = UDP_open(SERVER_ADDR, SERVER_PORT_START + 4); } if(handle < 0) { out_result_string(0, "TCP/UDP open() failed"); return; } //---------- // if TCP (not UDP), wait for connected state if(tcpNotUdp) { // wait until connected int res; while(1) { res = TCP_wait_state(handle, TESTABLISH, 1); if(res == E_NORMAL) { break; } DWORD now = getTicks(); if((now - start) > 5*200) { out_result_string(0, "TCP_wait_state() timeout"); goto test01close; } } if(res != E_NORMAL) { out_result_error_string(0, res, "TCP_wait_state() failed"); goto test01close; } } //--------------------- int res; for(i=0; i<blockSizesCount; i++) { res = sendAndReceive(tcpNotUdp, blockSizes[i], handle, 1); if(!res) { // if single block-send-and-receive operation failed, quit and close goto test01close; } } //--------------------- out_result(1); // success! test01close: if(tcpNotUdp) { res = TCP_close(handle, 0, 0); // close } else { res = UDP_close(handle); // close } if(res != E_NORMAL) { out_result_error_string(0, res, "TCP/UDP close() failed"); } }
int ftp_send_file(char *filename, char *command) { int rc,state,x; size_t bytes,total=0,timeout; char buff[512]; FILE *fid; int dtp=E_REFUSE; if (ftp_use_port!='Y') { dtp = ftp_passive_connect(); } /* if (dtp==E_REFUSE) { dtp = ftp_listen_connect(); } */ if (dtp==E_REFUSE) { dtp = ftp_port_connect(); } if (dtp>=0) { rc= ftp_allocate(filename); rc= news_send_command( fpi, command ); /* rc=CNbyte_count(dtp); fprintf( log, "Pre-Listen CNbyte_count returns %d, %s \n", rc, get_err_text(rc)); */ if (CNbyte_count( dtp )==E_LISTEN) { if ((state=ftp_listen( dtp ))>=0) { state = E_NORMAL; } } else { state = TCP_wait_state( dtp, TESTABLISH, 15 ); } if (state==E_NORMAL) { rc = ftp_receive_continuations( fpi, "dummy", FALSE ); fid = fopen( filename, "rb" ); if (fid!=NULL) { while ((bytes=fread( buff, 1, 512, fid))>0) { timeout=clock()+max_to*CLK_TCK; /* timeout */ do { x = TCP_send( dtp, buff, (int16)bytes ); if (x!=0) { if (clock()>timeout) { if (x==E_OBUFFULL) { bytes=-FTP_OBUFF_SIZE; } x=E_CNTIMEOUT; } } if (handle_escape_events()==27) { x=E_USERTIMEOUT; } /* if (Bconstat(2)==-1 && (Bconin(2) & 0xFF)==27) { /* Esc key */ /* x=E_USERTIMEOUT; } */ } while (x==E_OBUFFULL); /* retry if 'Output Buffer full */ total+=bytes; browser->msg_status(8, total); if (x<0) { fprintf( log, "TCP_send returns %s \n", get_err_text(x)); browser->msg_status(0, x); break; } } fclose( fid ); } } else { fprintf( log, "TCP_wait_state returns %s \n", get_err_text(state)); rc=CNbyte_count(dtp); fprintf( log, "CNbyte_count returns %d, %s \n", rc, get_err_text(rc)); rc = state; } TCP_close( dtp, 5 ); /* wait for connection to close */ } else { fprintf( log, "open_connection returns %s \n", get_err_text(dtp)); rc = dtp; } return(rc); }
static void waitRequests(void) { int16 cnId, state; int16 nInQueue; int toggle, proceed=1; do { /* listen again */ if( (cnId = TCP_open(0, LPR_LOC_PORT, 0, tcpBuffSize)) <= 0 ) { uiPrintf(uiH, uiPrERR, "waitRequests|TCP_open"); return; } if ( (state = TCP_wait_state(cnId, TLISTEN, 30)) < 0 ) { uiPrintf(uiH, uiPrERR, "waitRequests|%s", get_err_text(state)); return; } toggle = 10; /* every ten waits look also for an AES message */ while ( (nInQueue = CNbyte_count(cnId)) != E_EOF ) { /* poll for input */ /* listening or no data yet cause us to wait */ if (nInQueue == E_LISTEN || nInQueue == 0 || nInQueue == E_NODATA) { if (--toggle>0) { uiYield(uiH, YIELDMS); } else { WORD msgbuff[8]; WORD event; /* Ergebnis mit Ereignissen */ WORD mx, my, /* Mauskoordinaten */ mbutton, /* Mausknopf */ mkstate, /* keyb shift status for mouse button */ mclicks; /* Anzahl Mausklicks */ UWORD keycode; /* scancode + asciicode */ toggle=10; event = evnt_multi( MU_MESAG | MU_TIMER, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, msgbuff, YIELDMS, 0, &mx, &my, &mbutton, &mkstate, &keycode, &mclicks); if ( (event & MU_MESAG) && msgbuff[0] == AP_TERM ) { proceed=0; /* no more new connections */ break; /* end listening */ } } } else { if (nInQueue > 0) { /* otherwise there is valid data */ NDB* ndb; if ( (ndb = CNget_NDB(cnId)) != NULL ) { dispatchD(cnId, ndb); } else { uiPrintf(uiH, uiPrERR, "waitRequests|get_NDB"); break; } } else { /* catch other errors */ uiPrintf(uiH, uiPrERR, "waitRequests|%s", get_err_text(nInQueue)); break; } /* if valid data */ } /* if any data */ } /* while wait for a request */ TCP_close(cnId, TIMEOUT, NULL); /* disconnect */ } while (proceed); /* while new connection shall be done */ } /* waitRequests */