X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Firc_src%2Fmain.c;h=901e8ac1853ee5f6a8c0e1cd8be2879e526d6799;hb=507f19941f45bca7c1de783a394f56b15f10be4d;hp=cf01d605efb37e58e9883d5e2b65b49844c8336e;hpb=bfacdd3b71576cf6ceaa83352d3a7d162adb75e1;p=tpg%2Facess2.git diff --git a/Usermode/Applications/irc_src/main.c b/Usermode/Applications/irc_src/main.c index cf01d605..901e8ac1 100644 --- a/Usermode/Applications/irc_src/main.c +++ b/Usermode/Applications/irc_src/main.c @@ -113,10 +113,12 @@ int main(int argc, const char *argv[], const char *envp[]) // HACK: Static server entry // UCC (University [of Western Australia] Computer Club) IRC Server -// gWindow_Status.Server = Server_Connect( "UCC", "130.95.13.18", 6667 ); - gWindow_Status.Server = Server_Connect( "Freenode", "89.16.176.16", 6667 ); + gWindow_Status.Server = Server_Connect( "UCC", "130.95.13.18", 6667 ); + // Freenode (#osdev) +// gWindow_Status.Server = Server_Connect( "Freenode", "89.16.176.16", 6667 ); // gWindow_Status.Server = Server_Connect( "Host", "10.0.2.2", 6667 ); -// gWindow_Status.Server = Server_Connect( "BitlBee", "192.168.1.34", 6667 ); + // Local server +// gWindow_Status.Server = Server_Connect( "BitlBee", "192.168.1.39", 6667 ); if( !gWindow_Status.Server ) return -1; @@ -205,6 +207,9 @@ int ParseArguments(int argc, const char *argv[]) return 0; } +/** + * \brief Handle a line from the prompt + */ int ParseUserCommand(char *String) { if( String[0] == '/' ) @@ -357,8 +362,7 @@ tMessage *Message_Append(tServer *Server, int Type, const char *Source, const ch // Determine if it's a channel or PM message else if( Dest[0] == '#' || Dest[0] == '&' ) // TODO: Better determining here { - tWindow *prev = NULL; - for(win = gpWindows; win; prev = win, win = win->Next) + for(win = gpWindows; win; win = win->Next) { if( win->Server == Server && strcmp(win->Name, Dest) == 0 ) { @@ -520,11 +524,12 @@ void ParseServerLine(tServer *Server, char *Line) int pos = 0; char *ident, *cmd; - _SysDebug("Server %s: Line = %s", Server->Name, Line); + _SysDebug("[%s] %s", Server->Name, Line); // Message? if( *Line == ':' ) { + pos ++; ident = GetValue(Line, &pos); // Ident (user or server) cmd = GetValue(Line, &pos); @@ -548,18 +553,29 @@ void ParseServerLine(tServer *Server, char *Line) switch(num) { + case 332: // Topic + user = message; // Channel + message = Line + pos + 1; // Topic + Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Topic: %s", message); + break; + case 333: // Topic set by + user = message; // Channel + message = GetValue(Line, &pos); // User + GetValue(Line, &pos); // Timestamp + Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Set by %s", message); + break; case 353: // /NAMES list // = :list -// GetValue(Line, &pos); // '=' + // '=' was eaten in and set to message user = GetValue(Line, &pos); // Actually channel message = Line + pos + 1; // List - Message_AppendF(Server, MSG_TYPE_SERVER, user, "", "Names: %s", message); + Message_AppendF(Server, MSG_TYPE_SERVER, user, user, "Names: %s", message); break; case 366: // end of /NAMES list // :msg user = message; message = Line + pos + 1; - Message_Append(Server, MSG_TYPE_SERVER, user, "", message); + Message_Append(Server, MSG_TYPE_SERVER, user, user, message); break; case 372: // MOTD Data case 376: // MOTD End @@ -575,6 +591,7 @@ void ParseServerLine(tServer *Server, char *Line) char *class, *message; class = GetValue(Line, &pos); + _SysDebug("NOTICE class='%s'", class); if( Line[pos] == ':' ) { message = Line + pos + 1; @@ -597,13 +614,17 @@ void ParseServerLine(tServer *Server, char *Line) else { message = GetValue(Line, &pos); } + + // TODO: Catch when the privmsg is addressed to the user + // Cmd_PRIVMSG(Server, dest, ident, message); + *strchr(ident, '!') = '\0'; // Hello SIGSEGV Message_Append(Server, MSG_TYPE_STANDARD, ident, dest, message); } else if( strcmp(cmd, "JOIN" ) == 0 ) { char *channel; - channel = GetValue(Line, &pos) + 1; + channel = Line + pos + 1; Window_Create(Server, channel); } else @@ -706,38 +727,21 @@ int writef(int FD, const char *Format, ...) int OpenTCP(const char *AddressString, short PortNumber) { int fd, addrType; - char *iface; char addrBuffer[8]; // Parse IP Address addrType = Net_ParseAddress(AddressString, addrBuffer); if( addrType == 0 ) { fprintf(stderr, "Unable to parse '%s' as an IP address\n", AddressString); + _SysDebug("Unable to parse '%s' as an IP address\n", AddressString); return -1; } // Finds the interface for the destination address - iface = Net_GetInterface(addrType, addrBuffer); - if( iface == NULL ) { - fprintf(stderr, "Unable to find a route to '%s'\n", AddressString); - return -1; - } - -// printf("iface = '%s'\n", iface); - - // Open client socket - // TODO: Move this out to libnet? - { - int len = snprintf(NULL, 100, "/Devices/ip/%s/tcpc", iface); - char path[len+1]; - snprintf(path, 100, "/Devices/ip/%s/tcpc", iface); - fd = open(path, OPENFLAG_READ|OPENFLAG_WRITE); - } - - free(iface); - + fd = Net_OpenSocket(addrType, addrBuffer, "tcpc"); if( fd == -1 ) { - fprintf(stderr, "Unable to open TCP Client for reading\n"); + fprintf(stderr, "Unable to open TCP Client to '%s'\n", AddressString); + _SysDebug("Unable to open TCP client to '%s'\n", AddressString); return -1; }