\r
memset(&srv, 0, sizeof(srv));\r
\r
+ // Parse Command line\r
+ // - Sets the server configuration globals\r
if( (tmp = ParseArguments(argc, argv)) ) {\r
return tmp;\r
}\r
\r
+ // Connect to the remove server\r
srv.FD = OpenTCP( gsRemoteAddress, giRemotePort );\r
if( srv.FD == -1 ) {\r
fprintf(stderr, "Unable to create socket\n");\r
return -1;\r
}\r
\r
+ printf("Connection opened\n");\r
+ ProcessIncoming(&srv);\r
+ \r
writef(srv.FD, "USER %s %s %s : %s\n", gsUsername, gsHostname, gsRemoteAddress, gsRealName);\r
- writef(srv.FD, "NICK %s", gsNickname);\r
+ writef(srv.FD, "NICK %s\n", gsNickname);\r
\r
- ProcessIncoming(&srv);\r
+ printf("Processing\n");\r
+ \r
+ for( ;; )\r
+ {\r
+ fd_set readfds;\r
+ int rv;\r
+ \r
+ FD_ZERO(&readfds);\r
+ FD_SET(0, &readfds); // stdin\r
+ FD_SET(srv.FD, &readfds);\r
+ \r
+ rv = select(srv.FD, &readfds, 0, 0, NULL);\r
+ if( rv == -1 ) break;\r
+ \r
+ if(FD_ISSET(0, &readfds))\r
+ {\r
+ // User input\r
+ }\r
+ \r
+ // Server response\r
+ if(FD_ISSET(srv.FD, &readfds))\r
+ {\r
+ ProcessIncoming(&srv);\r
+ }\r
+ }\r
\r
close(srv.FD);\r
return 0;\r
char *ret = Src + pos;\r
char *end;\r
\r
+ if( !Src ) return NULL;\r
+ \r
while( *ret == ' ' ) ret ++;\r
\r
end = strchr(ret, ' ');\r
*/\r
void ParseServerLine(tServer *Server, char *Line)\r
{\r
- int pos;\r
+ int pos = 0;\r
char *ident, *cmd;\r
if( *Line == ':' ) {\r
// Message\r
// process it line by line\r
// ioctl#8 on a TCP client gets the number of bytes in the recieve buffer\r
// - Used to avoid blocking\r
- while( ioctl(Server->FD, 8, NULL) )\r
+ #if NON_BLOCK_READ\r
+ while( (len = ioctl(Server->FD, 8, NULL)) > 0 )\r
{\r
+ #endif\r
// Read data\r
- len = read(Server->FD, BUFSIZ - Server->ReadPos, Server->InBuf + Server->ReadPos);\r
+ len = read(Server->FD, BUFSIZ - Server->ReadPos, &Server->InBuf[Server->ReadPos]);\r
Server->InBuf[Server->ReadPos + len] = '\0';\r
\r
// Break into lines\r
\r
// Handle incomplete lines\r
if( ptr - Server->InBuf < len + Server->ReadPos ) {\r
- Server->ReadPos = ptr - Server->InBuf;\r
+ // Update the read position\r
+ // InBuf ReadPos ptr ReadPos+len\r
+ // | old | new used | new unused |\r
+ Server->ReadPos = len + Server->ReadPos - (ptr - Server->InBuf);\r
+ // Copy stuff back (moving "new unused" to the start of the buffer)\r
memcpy(Server->InBuf, ptr, Server->ReadPos);\r
}\r
else {\r
Server->ReadPos = 0;\r
}\r
+ #if NON_BLOCK_READ\r
}\r
+ #endif\r
}\r
\r
/**\r
return -1;\r
}\r
\r
+ printf("iface = '%s'\n", iface);\r
+ \r
// Open client socket\r
// TODO: Move this out to libnet?\r
{\r
free(iface);\r
\r
if( fd == -1 ) {\r
+ fprintf(stderr, "Unable to open TCP Client for reading\n");\r
return -1;\r
}\r
-\r
+ \r
// Set remote port and address\r
+ printf("Setting port and remote address\n");\r
ioctl(fd, 5, &PortNumber);\r
ioctl(fd, 6, addrBuffer);\r
\r
// Connect\r
+ printf("Initiating connection\n");\r
if( ioctl(fd, 7, NULL) == 0 ) {\r
// Shouldn't happen :(\r
+ fprintf(stderr, "Unable to start connection\n");\r
return -1;\r
}\r
\r