void testConnectOverload(const char* url, bool acceptSuccess) { int connects = 0, events = 0; int result = 0; int conn; bool hasConn = false; MAUtil::Vector<Handle> conns; do { EVENT event; while(maGetEvent(&event)) { if(event.type == EVENT_TYPE_CLOSE || (event.type == EVENT_TYPE_KEY_PRESSED && event.key == MAK_0)) { maExit(0); } else if(event.type == EVENT_TYPE_CONN) { printf("Op %i conn %i result %i\n", event.conn.opType, event.conn.handle, event.conn.result); MAASSERT(event.conn.opType == CONNOP_CONNECT); conn = event.conn.handle; if(acceptSuccess) { if(event.conn.result < 0) { result = event.conn.result; } } else { result = event.conn.result; } MAASSERT(event.conn.result != 0); hasConn = true; events++; printf("Event %i\n", events); break; } } if(result == 0) { conn = maConnect(url); conns.add(conn); if(conn < 0) { printf("maConnect error %i\n", conn); result = conn; hasConn = false; } else { connects++; printf("Connect %i\n", connects); } } else if(events != connects) maWait(0); } while(events != connects);// && connects < 3); if(hasConn) { printf("Result %i on handle %i after %i connects\n", result, conn, connects); } else { printf("Result %i after %i connects\n", result, connects); } printf("Closing %i handles\n", conns.size()); for(int i=0; i<conns.size(); i++) { maConnClose(conns[i]); } printf("Done.\n"); }
void MANetworkReset() { //stop all operations while(true) { ConnItr itr = gConnections.begin(); if(itr == gConnections.end()) break; MAHandle conn = itr->first; maConnClose(conn); } gConnNextHandle = 1; }
int waitConn(Handle conn) { while(1) { EVENT event; if(maGetEvent(&event)) { if(event.type == EVENT_TYPE_CLOSE || (event.type == EVENT_TYPE_KEY_PRESSED && event.key == MAK_0)) { maConnClose(conn); maExit(0); } else if(event.type == EVENT_TYPE_KEY_PRESSED && event.key == MAK_1) { maConnClose(conn); } else if(event.type == EVENT_TYPE_CONN) { printf("Result: %i\n", event.conn.result); /*if(event.conn.result <= 0) { Freeze(0); }*/ return event.conn.result; } } maWait(0); } }
extern "C" int MAMain() { const char* purl = "http://wap.mopix.se/"; char buffer[45000] = {0}; Handle sock; int size, result; println("HTTP GET test"); println(purl); // maConnect("socket://www.mopix.se:80", &size); //crash test dummy sock = maConnect(purl); printlnf("sock %i", sock); if(sock <= 0) { goto exit; } result = AnimatedConnWait(); printlnf("result %i", result); if(result <= 0) { goto exit; } size = MAUtil::getHttpConLen(sock); printlnf("size %i", size); if(size <= 0) { goto exit; } { result = ConnReadAtLeast(sock, size, sizeof(buffer), buffer); printlnf("read %i", result); if(result <= 0) { goto exit; } maConnClose(sock); buffer[result] = 0; printlnf(buffer); } exit: println("Yeah, we're done."); FREEZE; }
int MAMain() { Handle conn; char ping[] = "ping\n"; char buffer[1024]; int res; #ifdef CONPRINT InitConsole(); gConsoleLogging = 1; #endif //println("Socket test"); retry: printlnf("Connecting..."); conn = maConnect("socket://130.237.3.104:6666"); //test DNS resolution res = AnimatedConnWait(); if(res <= 0) { printlnf("err %i", res); goto exit; } /*conn = maConnect("socket://217.25.35.146:81"); //test IP address reading res = AnimatedConnWait(); if(res <= 0) { printlnf("err %i", res); goto exit; }*/ println("Writing..."); maConnWrite(conn, ping, sizeof(ping)); res = AnimatedConnWait(); if(res <= 0) { printlnf("err %i", res); goto exit; } println("Reading..."); res = ConnReadAtLeast(conn, 4, sizeof(buffer), buffer); if(res <= 0) { printlnf("err %i", res); goto exit; } maConnClose(conn); printlnf("Got %i bytes", res); buffer[res] = 0; println(buffer); maUpdateScreen(); exit: println("Press a key"); for(;;) { EVENT event; while(maGetEvent(&event)) { if(event.type == EVENT_TYPE_CLOSE || (event.type == EVENT_TYPE_KEY_PRESSED && event.key == MAK_0)) { maExit(0); } else if(event.type == EVENT_TYPE_KEY_PRESSED) { goto retry; } } maWait(0); } }
// returns the contents of the given url char *Controller::readConnection(const char *url) { char *result = NULL; logEntered(); _output->print("\033[ LLoading..."); MAHandle conn = maConnect(url); if (conn < 1) { logPrint("Failed connecting to %s\n", url); } else { _runMode = conn_state; logPrint("Connecting to %s\n", url); bool connected = false; byte buffer[1024]; int length = 0; int size = 0; int now = maGetMilliSecondCount(); MAEvent event; // pause until connected while (_runMode == conn_state) { event = processEvents(EVENT_WAIT_INFINITE, EVENT_TYPE_CONN); if (event.type == EVENT_TYPE_CONN) { switch (event.conn.opType) { case CONNOP_CONNECT: // connection established if (!connected) { connected = (event.conn.result > 0); if (connected) { memset(buffer, 0, sizeof(buffer)); maConnRead(conn, buffer, sizeof(buffer)); } else { logPrint("Connection error\n"); _runMode = init_state; } } break; case CONNOP_READ: // connRead completed if (event.conn.result > 0) { size = event.conn.result; if (result == NULL) { result = (char *)tmp_alloc(size + 1); memcpy(result, buffer, size); length = size; } else { result = (char *)tmp_realloc(result, length + size + 1); memcpy(result + length, buffer, size); length += size; } result[length] = 0; memset(buffer, 0, sizeof(buffer)); maConnRead(conn, buffer, sizeof(buffer)); } else { // no more data _runMode = init_state; } break; default: logPrint("Connection error\n"); _runMode = init_state; } } } logPrint("Loaded in %d msecs\n", maGetMilliSecondCount() - now); } maConnClose(conn); return result; }