int resolveMAC(SceNetEtherAddr * mac, uint32_t * ip) { // Get Local MAC Address SceNetEtherAddr localMac; getLocalMac(&localMac); // Local MAC Requested if(memcmp(&localMac, mac, sizeof(SceNetEtherAddr)) == 0) { // Get Local IP Address sockaddr_in sockAddr; getLocalIp(&sockAddr); *ip = sockAddr.sin_addr.s_addr; return 0; // return succes } // Multithreading Lock peerlock.lock(); // Peer Reference SceNetAdhocctlPeerInfo * peer = friends; // Iterate Peers for(; peer != NULL; peer = peer->next) { // Found Matching Peer if(memcmp(&peer->mac_addr, mac, sizeof(SceNetEtherAddr)) == 0) { // Copy Data *ip = peer->ip_addr; // Multithreading Unlock peerlock.unlock(); // Return Success return 0; } } // Multithreading Unlock peerlock.unlock(); // Peer not found return -1; }
int resolveIP(uint32_t ip, SceNetEtherAddr * mac) { sockaddr_in addr; getLocalIp(&addr); uint32 localIp = addr.sin_addr.s_addr; if(ip == localIp){ getLocalMac(mac); return 0; } // Multithreading Lock peerlock.lock(); // Peer Reference SceNetAdhocctlPeerInfo * peer = friends; // Iterate Peers for(; peer != NULL; peer = peer->next) { // Found Matching Peer if(peer->ip_addr == ip) { // Copy Data *mac = peer->mac_addr; // Multithreading Unlock peerlock.unlock(); // Return Success return 0; } } // Multithreading Unlock peerlock.unlock(); // Peer not found return -1; }
int initNetwork(SceNetAdhocctlAdhocId *adhoc_id){ int iResult = 0; #ifdef _MSC_VER WSADATA data; iResult = WSAStartup(MAKEWORD(2,2),&data); if(iResult != NOERROR){ ERROR_LOG(SCENET, "Wsa failed"); return iResult; } #endif metasocket = (int)INVALID_SOCKET; metasocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); if(metasocket == INVALID_SOCKET){ ERROR_LOG(SCENET,"invalid socket"); return -1; } struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(27312); // Maybe read this from config too // Resolve dns addrinfo * resultAddr; addrinfo * ptr; in_addr serverIp; iResult = getaddrinfo(g_Config.proAdhocServer.c_str(),0,NULL,&resultAddr); if(iResult != 0){ ERROR_LOG(SCENET, "Dns error\n"); return iResult; } for(ptr = resultAddr; ptr != NULL; ptr = ptr->ai_next){ switch(ptr->ai_family){ case AF_INET: serverIp = ((sockaddr_in *)ptr->ai_addr)->sin_addr; } } server_addr.sin_addr = serverIp; iResult = connect(metasocket,(sockaddr *)&server_addr,sizeof(server_addr)); if(iResult == SOCKET_ERROR){ ERROR_LOG(SCENET,"Socket error"); return iResult; } memset(¶meter,0,sizeof(parameter)); strcpy((char *)¶meter.nickname.data, g_Config.sNickName.c_str()); parameter.channel = 1; // Fake Channel 1 // Prepare Login Packet getLocalMac(¶meter.bssid.mac_addr); SceNetAdhocctlLoginPacketC2S packet; packet.base.opcode = OPCODE_LOGIN; SceNetEtherAddr addres; getLocalMac(&addres); packet.mac = addres; strcpy((char *)packet.name.data, g_Config.sNickName.c_str()); memcpy(packet.game.data, adhoc_id->data, ADHOCCTL_ADHOCID_LEN); int sent = send(metasocket, (char*)&packet, sizeof(packet), 0); changeBlockingMode(metasocket,1); // Change to non-blocking if(sent > 0){ return 0; }else{ return -1; } }
int initNetwork(SceNetAdhocctlAdhocId *adhoc_id){ #ifdef _XBOX return -1; #else int iResult = 0; #ifdef _MSC_VER WSADATA data; iResult = WSAStartup(MAKEWORD(2,2),&data); // Might be better to call WSAStartup/WSACleanup from sceNetInit/sceNetTerm isn't? since it's the first/last network function being used if(iResult != NOERROR){ ERROR_LOG(SCENET, "WSA failed"); return iResult; } #endif metasocket = (int)INVALID_SOCKET; metasocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); if(metasocket == INVALID_SOCKET){ ERROR_LOG(SCENET,"Invalid socket"); return -1; } struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(27312); // Maybe read this from config too // Resolve dns addrinfo * resultAddr; addrinfo * ptr; in_addr serverIp; serverIp.s_addr = INADDR_NONE; iResult = getaddrinfo(g_Config.proAdhocServer.c_str(),0,NULL,&resultAddr); if (iResult != 0) { ERROR_LOG(SCENET, "DNS error (%s)\n", g_Config.proAdhocServer.c_str()); return iResult; } for (ptr = resultAddr; ptr != NULL; ptr = ptr->ai_next) { switch (ptr->ai_family) { case AF_INET: serverIp = ((sockaddr_in *)ptr->ai_addr)->sin_addr; break; } } server_addr.sin_addr = serverIp; iResult = connect(metasocket,(sockaddr *)&server_addr,sizeof(server_addr)); if (iResult == SOCKET_ERROR) { uint8_t * sip = (uint8_t *)&server_addr.sin_addr.s_addr; ERROR_LOG(SCENET, "Socket error (%i) when connecting to %s/%u.%u.%u.%u:%u", errno, g_Config.proAdhocServer.c_str(), sip[0], sip[1], sip[2], sip[3], ntohs(server_addr.sin_port)); return iResult; } memset(¶meter,0,sizeof(parameter)); strcpy((char *)¶meter.nickname.data, g_Config.sNickName.c_str()); parameter.channel = 1; // Fake Channel 1 // Prepare Login Packet getLocalMac(¶meter.bssid.mac_addr); SceNetAdhocctlLoginPacketC2S packet; packet.base.opcode = OPCODE_LOGIN; SceNetEtherAddr addres; getLocalMac(&addres); packet.mac = addres; strcpy((char *)packet.name.data, g_Config.sNickName.c_str()); memcpy(packet.game.data, adhoc_id->data, ADHOCCTL_ADHOCID_LEN); int sent = send(metasocket, (char*)&packet, sizeof(packet), 0); changeBlockingMode(metasocket,1); // Change to non-blocking if(sent > 0){ return 0; }else{ return -1; } #endif }
int main(int argc, char *argv[]) { SetErrorMode(SEM_NOGPFAULTERRORBOX); SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); SingleApplication a(argc, argv); if (a.isRunning()) { return 0; } char *pFile = NULL; QString strFile = ""; if (argc >= 2) { pFile = argv[1]; QTextCodec *textcode = QTextCodec::codecForName("GB18030"); strFile = textcode->toUnicode(pFile); } #ifndef QT_NO_DEBUG showMainDlgNoExcept(a, strFile); return 1; /* QString appDir = QApplication::applicationDirPath() + "/"; if (argc <= 1 || strcmp(argv[1], "-s") != 0) { QProcess::startDetached(appDir + Verify::startExe()); return 0; }*/ #else #ifdef UKey showMainDlgNoExcept(a, strFile); return 0; #else AuthorFile=QApplication::applicationDirPath() + "/AuthorFile"; initDb(); MD5 md5_toApply;//用于生成申请码 unsigned char address[1024]; memset(address, 0, 1024); #ifndef DISKSN if (getLocalMac(address) > 0) #else if (GetHardDriveSerialNumber((char*)address, 1024) > 0) #endif { md5_toApply.update((const char *)address);//生成申请码 } else { } if (!Dialog::hasKey()) { Dialog w; w.show(); a.exec(); exit(0); } showMainDlgNoExcept(a, strFile); #endif #endif }