From 4d6ff1e9f8ddd2ebb78fcb2a2413a0a63dd08dfa Mon Sep 17 00:00:00 2001 From: Darren VanBuren Date: Sun, 9 Jul 2017 13:26:48 -0700 Subject: [PATCH] Got a barebones Qt UI up, and got stuff writing in the message log. --- CMakeLists.txt | 8 ++-- cmake/modules/FindFOX.cmake | 62 -------------------------- dns.cpp | 23 ++++++++++ dns.h | 9 ++++ main.cpp | 87 ++++++++++++++++++++++--------------- 5 files changed, 88 insertions(+), 101 deletions(-) delete mode 100644 cmake/modules/FindFOX.cmake create mode 100644 dns.cpp create mode 100644 dns.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b011eb4..ca60024 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,11 +7,11 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/") find_package(NSPR REQUIRED) find_package(NSS REQUIRED) -find_package(FOX REQUIRED) +find_package(Qt5Widgets REQUIRED) -include_directories(${NSPR_INCLUDE_DIRS} ${NSS_INCLUDE_DIRS} ${FOX_INCLUDE_DIR}) +include_directories(${NSPR_INCLUDE_DIRS} ${NSS_INCLUDE_DIRS}) -set(SOURCE_FILES main.cpp) +set(SOURCE_FILES main.cpp dns.cpp) add_executable(oksirc ${SOURCE_FILES}) -target_link_libraries(oksirc ${NSPR_LIBRARIES} ${NSS_LIBRARIES} ${FOX_LIBRARY}) \ No newline at end of file +target_link_libraries(oksirc ${NSPR_LIBRARIES} ${NSS_LIBRARIES} Qt5::Widgets) \ No newline at end of file diff --git a/cmake/modules/FindFOX.cmake b/cmake/modules/FindFOX.cmake deleted file mode 100644 index 46f91b5..0000000 --- a/cmake/modules/FindFOX.cmake +++ /dev/null @@ -1,62 +0,0 @@ -# Locate gdal -# This module defines -# FOX_LIBRARY -# FOX_FOUND, if false, do not try to link to gdal -# FOX_INCLUDE_DIR, where to find the headers -# -# $FOX_DIR is an environment variable that would -# correspond to the ./configure --prefix=$FOX_DIR -# -# Created by Robert Osfield. - -FIND_PATH(FOX_INCLUDE_DIR fx.h - $ENV{FOX_DIR}/include/fox-1.6 - $ENV{FOX_DIR}/fox-1.6 - ~/Library/Frameworks/fox-1.6 - /Library/Frameworks/fox-1.6 - /usr/local/include/fox-1.6 - /usr/include/fox-1.6 - /sw/include/fox-1.6 # Fink - /opt/local/include/fox-1.6 # DarwinPorts - /opt/csw/include/fox-1.6 # Blastwave - /opt/include/fox-1.6 - /usr/freeware/include/fox-1.6 - $ENV{FOX_DIR}/include - $ENV{FOX_DIR} - ~/Library/Frameworks - /Library/Frameworks - /usr/local/include - /usr/include - /sw/include # Fink - /opt/local/include # DarwinPorts - /opt/csw/include # Blastwave - /opt/include - /usr/freeware/include - ) - -MACRO(FIND_FOX_LIBRARY MYLIBRARY MYLIBRARYNAME) - - FIND_LIBRARY(${MYLIBRARY} - NAMES ${MYLIBRARYNAME} - PATHS - $ENV{FOX_DIR}/lib - $ENV{FOX_DIR} - ~/Library/Frameworks - /Library/Frameworks - /usr/local/lib - /usr/lib - /sw/lib - /opt/local/lib - /opt/csw/lib - /opt/lib - /usr/freeware/lib64 - ) - -ENDMACRO(FIND_FOX_LIBRARY LIBRARY LIBRARYNAME) - -FIND_FOX_LIBRARY(FOX_LIBRARY FOX-1.6) - -SET(FOX_FOUND "NO") -IF(FOX_LIBRARY AND FOX_INCLUDE_DIR) - SET(FOX_FOUND "YES") -ENDIF(FOX_LIBRARY AND FOX_INCLUDE_DIR) diff --git a/dns.cpp b/dns.cpp new file mode 100644 index 0000000..c11df04 --- /dev/null +++ b/dns.cpp @@ -0,0 +1,23 @@ +#include "dns.h" + +PRErrorCode LookupName(char *hostname, PRNetAddr *result) { + // Attempt to resolve a name. + PRAddrInfo *addrInfos = PR_GetAddrInfoByName(hostname, PR_AF_UNSPEC, PR_AI_ADDRCONFIG); + void *iter = nullptr; +// PRNetAddr firstAddr; +// PRNetAddr tempAddr; +// do { + iter = PR_EnumerateAddrInfo(iter, addrInfos, 0, result); + char ipString[80]; + PRStatus status = PR_NetAddrToString(result, ipString, 75); + if(status == PR_FAILURE) { + const PRErrorCode err = PR_GetError(); + fprintf(stderr, "Error: Converting PRNetAddr to string %d: %s\n", + err, PR_ErrorToName(err)); + return err; + } + printf("Found IP Address: %s\n", ipString); + return 0; +// break; +// } while(iter); +} \ No newline at end of file diff --git a/dns.h b/dns.h new file mode 100644 index 0000000..9e0ccaa --- /dev/null +++ b/dns.h @@ -0,0 +1,9 @@ +#ifndef OKSIRC_DNS_H +#define OKSIRC_DNS_H +#include +#include +#include + +PRErrorCode LookupName(char *, PRNetAddr *); + +#endif //OKSIRC_DNS_H diff --git a/main.cpp b/main.cpp index 8921e51..2d85496 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,5 @@ #include -#include +#include "dns.h" // NSPR include files #include @@ -15,18 +15,25 @@ #include #include +// Qt Include Files, should come after NSPR / NSS +#include +#include + +NSSInitContext *nssContext; +SECMODModule *builtInRootsMod; + // PK11 Password Function typedef typedef char *(*PK11PasswordFunc)( PK11SlotInfo *slot, PRBool retry, void *arg); -int main(int argc, char* argv[]) { +void init() { // NSPR Init PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0); // NSS Init - NSSInitContext *const nssContext = + nssContext = NSS_InitContext("sql:/etc/pki/nssdb", "", "", "", NULL, NSS_INIT_READONLY | NSS_INIT_PK11RELOAD); if(nssContext == NULL) { @@ -70,53 +77,63 @@ int main(int argc, char* argv[]) { // Initialize trusted certificate store char module_name[] = "library=libnssckbi.so name=\"Root Certs\""; - SECMODModule *builtInRootsMod = SECMOD_LoadUserModule(module_name, NULL, PR_FALSE); + builtInRootsMod = SECMOD_LoadUserModule(module_name, NULL, PR_FALSE); if(builtInRootsMod == NULL || !builtInRootsMod->loaded) { const PRErrorCode err = PR_GetError(); fprintf(stderr, "Error: Loading built in roots module failed, code %d: %s\n", - err, PR_ErrorToName(err)); + err, PR_ErrorToName(err)); + exit(1); + } +} + +int main(int argc, char* argv[]) { + init(); + + PRNetAddr theAddr; + LookupName((char *)"buyvm.theoks.net", &theAddr); + + char ipString[80]; + PRStatus status = PR_NetAddrToString(&theAddr, ipString, 75); + if(status == PR_FAILURE) { + const PRErrorCode err = PR_GetError(); + fprintf(stderr, "Error: Converting PRNetAddr to string %d: %s\n", + err, PR_ErrorToName(err)); exit(1); } - // Attempt to resolve a name. - PRAddrInfo *addrInfos = PR_GetAddrInfoByName("buyvm.theoks.net", PR_AF_UNSPEC, PR_AI_ADDRCONFIG); - void *iter = nullptr; - PRNetAddr firstAddr; - PRNetAddr tempAddr; - do { - iter = PR_EnumerateAddrInfo(iter, addrInfos, 0, &tempAddr); - char ipString[80]; - PRStatus status = PR_NetAddrToString(&tempAddr, ipString, 75); - if(status == PR_FAILURE) { - const PRErrorCode err = PR_GetError(); - fprintf(stderr, "Error: Converting PRNetAddr to string %d: %s\n", - err, PR_ErrorToName(err)); - exit(1); - } - printf("Found IP Address: %s\n", ipString); - firstAddr = tempAddr; - } while(iter); PRFileDesc *tcpSocket = PR_NewTCPSocket(); - firstAddr.inet.port = 443; + theAddr.inet.port = 443; PRFileDesc *nssSocket; SSL_ImportFD(NULL, tcpSocket); - char *sendBuf = (char *)PR_MALLOC( 65536 * sizeof(char)); - char *toSend = (char *) "GET / HTTP/1.0\r\nHost: buyvm.theoks.net\r\nUser-Agent: oksirc_net_test\r\n\r\n"; - PR_Send(tcpSocket, sendBuf, null, 0, PR_INTERVAL_NO_TIMEOUT); + QApplication app(argc, argv); + QWidget mainWindow; + mainWindow.resize(1280, 720); + mainWindow.setWindowTitle("oksirc - early Qt test"); - FXApp app("Hello", "FoxTest"); - app.init(argc, argv); + QPlainTextEdit *mainLog = new QPlainTextEdit(); + mainLog->setReadOnly(true); + QLineEdit *textEntry = new QLineEdit(); + QPushButton *sendButton = new QPushButton(QApplication::translate("send", "Send")); - FXMainWindow *mainWindow = new FXMainWindow(&app, "Hello", NULL, NULL, DECOR_ALL); - new FXButton(mainWindow, "&Hello World!", NULL, &app, FXApp::ID_QUIT); - app.create(); - mainWindow->show(PLACEMENT_SCREEN); - int foxRetCode = app.run(); + QHBoxLayout *entryLineLayout = new QHBoxLayout(); + entryLineLayout->addWidget(textEntry); + entryLineLayout->addWidget(sendButton); + + QVBoxLayout *mainLogAndLineLayout = new QVBoxLayout(); + mainLogAndLineLayout->addWidget(mainLog); + mainLogAndLineLayout->addLayout(entryLineLayout); + mainWindow.setLayout(mainLogAndLineLayout); + mainWindow.show(); + textEntry->setFocus(); + + char messageBuf[1024]; + sprintf(messageBuf, "Found IP Address: %s", ipString); + mainLog->appendPlainText(messageBuf); SECMOD_DestroyModule(builtInRootsMod); NSS_ShutdownContext(nssContext); - return app.run(); + return app.exec(); } \ No newline at end of file