static void VM_M_crypto_getidfp(prvm_prog_t *prog) { lhnetaddress_t addr; const char *s; char idfp[FP64_SIZE + 1]; VM_SAFEPARMCOUNT(1,VM_M_crypto_getidfp); s = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( prog, s ); if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, idfp, sizeof(idfp), NULL)) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, idfp ); else PRVM_G_INT( OFS_RETURN ) = OFS_NULL; }
static void VM_M_crypto_getencryptlevel(prvm_prog_t *prog) { lhnetaddress_t addr; const char *s; int aeslevel; char vabuf[1024]; VM_SAFEPARMCOUNT(1,VM_M_crypto_getencryptlevel); s = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( prog, s ); if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, NULL, 0, &aeslevel)) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString(prog, aeslevel ? va(vabuf, sizeof(vabuf), "%d AES128", aeslevel) : "0"); else PRVM_G_INT( OFS_RETURN ) = OFS_NULL; }
int main(int argc, char **argv) { #if 1 char *buffer = "test", buffer2[1024]; int blen = strlen(buffer); int b2len = 1024; lhnetsocket_t *sock1; lhnetsocket_t *sock2; lhnetaddress_t myaddy1; lhnetaddress_t myaddy2; lhnetaddress_t myaddy3; lhnetaddress_t localhostaddy1; lhnetaddress_t localhostaddy2; int test1; int test2; printf("calling LHNET_Init\n"); LHNET_Init(); printf("calling LHNET_FromPort twice to create two local addresses\n"); LHNETADDRESS_FromPort(&myaddy1, LHNETADDRESSTYPE_INET4, 4000); LHNETADDRESS_FromPort(&myaddy2, LHNETADDRESSTYPE_INET4, 4001); LHNETADDRESS_FromString(&localhostaddy1, "127.0.0.1", 4000); LHNETADDRESS_FromString(&localhostaddy2, "127.0.0.1", 4001); printf("calling LHNET_OpenSocket_Connectionless twice to create two local sockets\n"); sock1 = LHNET_OpenSocket_Connectionless(&myaddy1); sock2 = LHNET_OpenSocket_Connectionless(&myaddy2); printf("calling LHNET_Write to send a packet from the first socket to the second socket\n"); test1 = LHNET_Write(sock1, buffer, blen, &localhostaddy2); printf("sleeping briefly\n"); #ifdef WIN32 Sleep (100); #else usleep (100000); #endif printf("calling LHNET_Read on the second socket to read the packet sent from the first socket\n"); test2 = LHNET_Read(sock2, buffer2, b2len - 1, &myaddy3); if (test2 > 0) Con_Printf("socket to socket test succeeded\n"); else Con_Printf("socket to socket test failed\n"); #ifdef WIN32 printf("press any key to exit\n"); getchar(); #endif printf("calling LHNET_Shutdown\n"); LHNET_Shutdown(); printf("exiting\n"); return 0; #else lhnetsocket_t *sock[16], *sendsock; int i; int numsockets; int count; int length; int port; time_t oldtime; time_t newtime; char *sendmessage; int sendmessagelength; lhnetaddress_t destaddress; lhnetaddress_t receiveaddress; lhnetaddress_t sockaddress[16]; char buffer[1536], addressstring[128], addressstring2[128]; if ((argc == 2 || argc == 5) && (port = atoi(argv[1])) >= 1 && port < 65535) { printf("calling LHNET_Init()\n"); LHNET_Init(); numsockets = 0; LHNETADDRESS_FromPort(&sockaddress[numsockets++], LHNETADDRESSTYPE_LOOP, port); LHNETADDRESS_FromPort(&sockaddress[numsockets++], LHNETADDRESSTYPE_INET4, port); LHNETADDRESS_FromPort(&sockaddress[numsockets++], LHNETADDRESSTYPE_INET6, port+1); sendsock = NULL; sendmessage = NULL; sendmessagelength = 0; for (i = 0;i < numsockets;i++) { LHNETADDRESS_ToString(&sockaddress[i], addressstring, sizeof(addressstring), 1); printf("calling LHNET_OpenSocket_Connectionless(<%s>)\n", addressstring); if ((sock[i] = LHNET_OpenSocket_Connectionless(&sockaddress[i]))) { LHNETADDRESS_ToString(LHNET_AddressFromSocket(sock[i]), addressstring2, sizeof(addressstring2), 1); printf("opened socket successfully (address \"%s\")\n", addressstring2); } else { printf("failed to open socket\n"); if (i == 0) { LHNET_Shutdown(); return -1; } } } count = 0; if (argc == 5) { count = atoi(argv[2]); if (LHNETADDRESS_FromString(&destaddress, argv[3], -1)) { sendmessage = argv[4]; sendmessagelength = strlen(sendmessage); sendsock = NULL; for (i = 0;i < numsockets;i++) if (sock[i] && LHNETADDRESS_GetAddressType(&destaddress) == LHNETADDRESS_GetAddressType(&sockaddress[i])) sendsock = sock[i]; if (sendsock == NULL) { printf("Could not find an open socket matching the addresstype (%i) of destination address, switching to listen only mode\n", LHNETADDRESS_GetAddressType(&destaddress)); argc = 2; } } else { printf("LHNETADDRESS_FromString did not like the address \"%s\", switching to listen only mode\n", argv[3]); argc = 2; } } printf("started, now listening for \"exit\" on the opened sockets\n"); oldtime = time(NULL); for(;;) { #ifdef WIN32 Sleep(1); #else usleep(1); #endif for (i = 0;i < numsockets;i++) { if (sock[i]) { length = LHNET_Read(sock[i], buffer, sizeof(buffer), &receiveaddress); if (length < 0) printf("localsock read error: length < 0"); else if (length > 0 && length < (int)sizeof(buffer)) { buffer[length] = 0; LHNETADDRESS_ToString(&receiveaddress, addressstring, sizeof(addressstring), 1); LHNETADDRESS_ToString(LHNET_AddressFromSocket(sock[i]), addressstring2, sizeof(addressstring2), 1); printf("received message \"%s\" from \"%s\" on socket \"%s\"\n", buffer, addressstring, addressstring2); if (!strcmp(buffer, "exit")) break; } } } if (i < numsockets) break; if (argc == 5 && count > 0) { newtime = time(NULL); if (newtime != oldtime) { LHNETADDRESS_ToString(&destaddress, addressstring, sizeof(addressstring), 1); LHNETADDRESS_ToString(LHNET_AddressFromSocket(sendsock), addressstring2, sizeof(addressstring2), 1); printf("calling LHNET_Write(<%s>, \"%s\", %i, <%s>)\n", addressstring2, sendmessage, sendmessagelength, addressstring); length = LHNET_Write(sendsock, sendmessage, sendmessagelength, &destaddress); if (length == sendmessagelength) printf("sent successfully\n"); else printf("LH_Write failed, returned %i (length of message was %i)\n", length, strlen(argv[4])); oldtime = newtime; count--; if (count <= 0) printf("Done sending, still listening for \"exit\"\n"); } } } for (i = 0;i < numsockets;i++) { if (sock[i]) { LHNETADDRESS_ToString(LHNET_AddressFromSocket(sock[i]), addressstring2, sizeof(addressstring2), 1); printf("calling LHNET_CloseSocket(<%s>)\n", addressstring2); LHNET_CloseSocket(sock[i]); } } printf("calling LHNET_Shutdown()\n"); LHNET_Shutdown(); return 0; } printf("Testing code for lhnet.c\nusage: lhnettest <localportnumber> [<sendnumberoftimes> <sendaddress:port> <sendmessage>]\n"); return -1; #endif }