#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sdk/inputdriver.h" #include "sdk/inputframework.h" #include "sdk/outputframework.h" #include "sdk/pikeykeycodes.h" #include "sdk/pikeytypes.h" #define printf pspDebugScreenPrintf #define MODULE_NAME "HDIRC-test" PSP_MODULE_INFO(MODULE_NAME, 0x1000, 1, 1); PSP_MAIN_THREAD_ATTR(0); SceCtrlData pad; char buffer[BUFSIZ]; char *ptr; char msg[256]; char nickbot[30]="HellDragonWiFi2"; char channel[20]="#geek-only"; char user[80]="JD JD JD :HDIRC Beta"; int sock; struct sockaddr_in client; int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, PSP_THREAD_ATTR_USER, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; } int connect_to_apctl(int config) { int err; int stateLast = -1; err = sceNetApctlConnect(config); if (err != 0) { printf(MODULE_NAME ": sceNetApctlConnect returns %08X\n", err); return 0; } printf(MODULE_NAME ": Connecting...\n"); while (1) { int state; err = sceNetApctlGetState(&state); if (err != 0) { printf(MODULE_NAME ": sceNetApctlGetState returns $%x\n", err); break; } if (state > stateLast) { printf(" connection state %d of 4\n", state); stateLast = state; } if (state == 4) break; sceKernelDelayThread(50*1000); } printf(MODULE_NAME ": Connected!\nNow connecting to IRC!\n"); if(err != 0) { return 0; } return 1; } int ctrl_thread(SceSize args, void *argp) { while (1) { sceCtrlReadBufferPositive(&pad, 1); if(pad.Buttons & PSP_CTRL_RTRIGGER) { send (sock, "QUIT\r\n", 6 , 0); sceKernelExitGame(); } } } int net_thread(SceSize args, void *argp) { int err; do { if((err = pspSdkInetInit())) { printf(MODULE_NAME ": Error, could not initialise the network %08X\n", err); break; } if(connect_to_apctl(1)) { sock = socket(AF_INET, SOCK_STREAM, 0); client.sin_family = AF_INET; client.sin_port = htons(8000); client.sin_addr.s_addr = inet_addr("208.71.169.36"); connect(sock, (struct sockaddr *)&client, sizeof(client)); sprintf (buffer, "NICK %s\n", nickbot); send (sock, buffer, strlen (buffer), 0); sprintf (buffer, "USER %s\n", user); send (sock, buffer, strlen (buffer), 0); sprintf (buffer, "JOIN %s\n", channel); send (sock, buffer, strlen (buffer), 0); while (1) { memset(buffer, '\0', BUFSIZ); recv(sock, buffer, BUFSIZ-1, 0); printf("%s",buffer); //pspDebugScreenClear(); // fucking scrolling is broken so the screen fucks up if (strstr(buffer, "PING :")) //pings :o { ptr = strstr(buffer, "PING :") + strlen("PING :"); snprintf(msg, 256, "PONG :%s\n", ptr); send(sock, msg, strlen(msg), 0); } /* if (strstr(buffer, ".version")) { ptr = strstr(buffer, ".version"); //snprintf(msg, 256, "PRIVMSG %s :test\n", channel); send(sock, "PRIVMSG #geek-only pong!\r\n", 26, 0); } */ //irc testing } } } while(0); return 0; } int main(int argc, char **argv) { SceUID thid,thid2; SetupCallbacks(); pspDebugScreenInit(); if(pspSdkLoadInetModules() < 0) { printf("Error, could not load inet modules\n"); sceKernelSleepThread(); } thid = sceKernelCreateThread("net_thread", net_thread, 0x18, 0x10000, PSP_THREAD_ATTR_USER, NULL); thid2 = sceKernelCreateThread("ctrl_thread", ctrl_thread, 0x18, 0x10000, PSP_THREAD_ATTR_USER, NULL); sceKernelStartThread(thid, 0, NULL); sceKernelStartThread(thid2, 1, NULL); sceKernelExitDeleteThread(0); return 0; }