diff --git a/Frameworks/JNetLib/English.lproj/InfoPlist.strings b/Frameworks/JNetLib/English.lproj/InfoPlist.strings deleted file mode 100644 index 5e45963c3..000000000 Binary files a/Frameworks/JNetLib/English.lproj/InfoPlist.strings and /dev/null differ diff --git a/Frameworks/JNetLib/Info.plist b/Frameworks/JNetLib/Info.plist deleted file mode 100644 index 0ec80c387..000000000 --- a/Frameworks/JNetLib/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleName - ${PRODUCT_NAME} - CFBundleIconFile - - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - FMWK - CFBundleSignature - ???? - CFBundleVersion - 1.0 - NSPrincipalClass - - - diff --git a/Frameworks/JNetLib/JNetLib.xcodeproj/TemplateIcon.icns b/Frameworks/JNetLib/JNetLib.xcodeproj/TemplateIcon.icns deleted file mode 100644 index 62cb7015e..000000000 Binary files a/Frameworks/JNetLib/JNetLib.xcodeproj/TemplateIcon.icns and /dev/null differ diff --git a/Frameworks/JNetLib/JNetLib.xcodeproj/project.pbxproj b/Frameworks/JNetLib/JNetLib.xcodeproj/project.pbxproj deleted file mode 100644 index 608006234..000000000 --- a/Frameworks/JNetLib/JNetLib.xcodeproj/project.pbxproj +++ /dev/null @@ -1,334 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 45; - objects = { - -/* Begin PBXBuildFile section */ - 17F6C5F80F5F9D5B000D9DA9 /* asyncdns.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5D50F5F9D5B000D9DA9 /* asyncdns.cpp */; }; - 17F6C5F90F5F9D5B000D9DA9 /* asyncdns.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5D60F5F9D5B000D9DA9 /* asyncdns.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C5FB0F5F9D5B000D9DA9 /* connection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5D80F5F9D5B000D9DA9 /* connection.cpp */; }; - 17F6C5FC0F5F9D5B000D9DA9 /* connection.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5D90F5F9D5B000D9DA9 /* connection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C5FD0F5F9D5B000D9DA9 /* httpget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5DA0F5F9D5B000D9DA9 /* httpget.cpp */; }; - 17F6C5FE0F5F9D5B000D9DA9 /* httpget.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5DB0F5F9D5B000D9DA9 /* httpget.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C5FF0F5F9D5B000D9DA9 /* httppost.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5DC0F5F9D5B000D9DA9 /* httppost.cpp */; }; - 17F6C6000F5F9D5B000D9DA9 /* httppost.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5DD0F5F9D5B000D9DA9 /* httppost.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C6010F5F9D5B000D9DA9 /* httpserv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5DE0F5F9D5B000D9DA9 /* httpserv.cpp */; }; - 17F6C6020F5F9D5B000D9DA9 /* httpserv.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5DF0F5F9D5B000D9DA9 /* httpserv.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C6050F5F9D5B000D9DA9 /* jnetlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5E20F5F9D5B000D9DA9 /* jnetlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C6060F5F9D5B000D9DA9 /* listen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5E30F5F9D5B000D9DA9 /* listen.cpp */; }; - 17F6C6070F5F9D5B000D9DA9 /* listen.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5E40F5F9D5B000D9DA9 /* listen.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C6090F5F9D5B000D9DA9 /* netinc.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5E60F5F9D5B000D9DA9 /* netinc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C60B0F5F9D5B000D9DA9 /* sslconnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5E80F5F9D5B000D9DA9 /* sslconnection.cpp */; }; - 17F6C60C0F5F9D5B000D9DA9 /* sslconnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5E90F5F9D5B000D9DA9 /* sslconnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C60D0F5F9D5B000D9DA9 /* ssllisten.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5EA0F5F9D5B000D9DA9 /* ssllisten.cpp */; }; - 17F6C60E0F5F9D5B000D9DA9 /* ssllisten.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5EB0F5F9D5B000D9DA9 /* ssllisten.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C6160F5F9D5B000D9DA9 /* udpconnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5F30F5F9D5B000D9DA9 /* udpconnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F6C6170F5F9D5B000D9DA9 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17F6C5F40F5F9D5B000D9DA9 /* util.cpp */; }; - 17F6C6180F5F9D5B000D9DA9 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F6C5F50F5F9D5B000D9DA9 /* util.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; - 17F6C5D50F5F9D5B000D9DA9 /* asyncdns.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = asyncdns.cpp; path = jnetlib/asyncdns.cpp; sourceTree = ""; }; - 17F6C5D60F5F9D5B000D9DA9 /* asyncdns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = asyncdns.h; path = jnetlib/asyncdns.h; sourceTree = ""; }; - 17F6C5D80F5F9D5B000D9DA9 /* connection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = connection.cpp; path = jnetlib/connection.cpp; sourceTree = ""; }; - 17F6C5D90F5F9D5B000D9DA9 /* connection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = connection.h; path = jnetlib/connection.h; sourceTree = ""; }; - 17F6C5DA0F5F9D5B000D9DA9 /* httpget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = httpget.cpp; path = jnetlib/httpget.cpp; sourceTree = ""; }; - 17F6C5DB0F5F9D5B000D9DA9 /* httpget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = httpget.h; path = jnetlib/httpget.h; sourceTree = ""; }; - 17F6C5DC0F5F9D5B000D9DA9 /* httppost.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = httppost.cpp; path = jnetlib/httppost.cpp; sourceTree = ""; }; - 17F6C5DD0F5F9D5B000D9DA9 /* httppost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = httppost.h; path = jnetlib/httppost.h; sourceTree = ""; }; - 17F6C5DE0F5F9D5B000D9DA9 /* httpserv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = httpserv.cpp; path = jnetlib/httpserv.cpp; sourceTree = ""; }; - 17F6C5DF0F5F9D5B000D9DA9 /* httpserv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = httpserv.h; path = jnetlib/httpserv.h; sourceTree = ""; }; - 17F6C5E20F5F9D5B000D9DA9 /* jnetlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jnetlib.h; path = jnetlib/jnetlib.h; sourceTree = ""; }; - 17F6C5E30F5F9D5B000D9DA9 /* listen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = listen.cpp; path = jnetlib/listen.cpp; sourceTree = ""; }; - 17F6C5E40F5F9D5B000D9DA9 /* listen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = listen.h; path = jnetlib/listen.h; sourceTree = ""; }; - 17F6C5E60F5F9D5B000D9DA9 /* netinc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netinc.h; path = jnetlib/netinc.h; sourceTree = ""; }; - 17F6C5E80F5F9D5B000D9DA9 /* sslconnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sslconnection.cpp; path = jnetlib/sslconnection.cpp; sourceTree = ""; }; - 17F6C5E90F5F9D5B000D9DA9 /* sslconnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sslconnection.h; path = jnetlib/sslconnection.h; sourceTree = ""; }; - 17F6C5EA0F5F9D5B000D9DA9 /* ssllisten.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ssllisten.cpp; path = jnetlib/ssllisten.cpp; sourceTree = ""; }; - 17F6C5EB0F5F9D5B000D9DA9 /* ssllisten.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ssllisten.h; path = jnetlib/ssllisten.h; sourceTree = ""; }; - 17F6C5F30F5F9D5B000D9DA9 /* udpconnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = udpconnection.h; path = jnetlib/udpconnection.h; sourceTree = ""; }; - 17F6C5F40F5F9D5B000D9DA9 /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = util.cpp; path = jnetlib/util.cpp; sourceTree = ""; }; - 17F6C5F50F5F9D5B000D9DA9 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = util.h; path = jnetlib/util.h; sourceTree = ""; }; - 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8DC2EF5B0486A6940098B216 /* JNetLib.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JNetLib.framework; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8DC2EF560486A6940098B216 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 034768DFFF38A50411DB9C8B /* Products */ = { - isa = PBXGroup; - children = ( - 8DC2EF5B0486A6940098B216 /* JNetLib.framework */, - ); - name = Products; - sourceTree = ""; - }; - 0867D691FE84028FC02AAC07 /* JNetLib */ = { - isa = PBXGroup; - children = ( - 08FB77AEFE84172EC02AAC07 /* Classes */, - 32C88DFF0371C24200C91783 /* Other Sources */, - 089C1665FE841158C02AAC07 /* Resources */, - 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, - 034768DFFF38A50411DB9C8B /* Products */, - ); - name = JNetLib; - sourceTree = ""; - }; - 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; - 089C1665FE841158C02AAC07 /* Resources */ = { - isa = PBXGroup; - children = ( - 8DC2EF5A0486A6940098B216 /* Info.plist */, - 089C1666FE841158C02AAC07 /* InfoPlist.strings */, - ); - name = Resources; - sourceTree = ""; - }; - 08FB77AEFE84172EC02AAC07 /* Classes */ = { - isa = PBXGroup; - children = ( - 17F6C5D50F5F9D5B000D9DA9 /* asyncdns.cpp */, - 17F6C5D60F5F9D5B000D9DA9 /* asyncdns.h */, - 17F6C5D80F5F9D5B000D9DA9 /* connection.cpp */, - 17F6C5D90F5F9D5B000D9DA9 /* connection.h */, - 17F6C5DA0F5F9D5B000D9DA9 /* httpget.cpp */, - 17F6C5DB0F5F9D5B000D9DA9 /* httpget.h */, - 17F6C5DC0F5F9D5B000D9DA9 /* httppost.cpp */, - 17F6C5DD0F5F9D5B000D9DA9 /* httppost.h */, - 17F6C5DE0F5F9D5B000D9DA9 /* httpserv.cpp */, - 17F6C5DF0F5F9D5B000D9DA9 /* httpserv.h */, - 17F6C5E20F5F9D5B000D9DA9 /* jnetlib.h */, - 17F6C5E30F5F9D5B000D9DA9 /* listen.cpp */, - 17F6C5E40F5F9D5B000D9DA9 /* listen.h */, - 17F6C5E60F5F9D5B000D9DA9 /* netinc.h */, - 17F6C5E80F5F9D5B000D9DA9 /* sslconnection.cpp */, - 17F6C5E90F5F9D5B000D9DA9 /* sslconnection.h */, - 17F6C5EA0F5F9D5B000D9DA9 /* ssllisten.cpp */, - 17F6C5EB0F5F9D5B000D9DA9 /* ssllisten.h */, - 17F6C5F30F5F9D5B000D9DA9 /* udpconnection.h */, - 17F6C5F40F5F9D5B000D9DA9 /* util.cpp */, - 17F6C5F50F5F9D5B000D9DA9 /* util.h */, - ); - name = Classes; - sourceTree = ""; - }; - 32C88DFF0371C24200C91783 /* Other Sources */ = { - isa = PBXGroup; - children = ( - ); - name = "Other Sources"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8DC2EF500486A6940098B216 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 17F6C5F90F5F9D5B000D9DA9 /* asyncdns.h in Headers */, - 17F6C5FC0F5F9D5B000D9DA9 /* connection.h in Headers */, - 17F6C5FE0F5F9D5B000D9DA9 /* httpget.h in Headers */, - 17F6C6000F5F9D5B000D9DA9 /* httppost.h in Headers */, - 17F6C6020F5F9D5B000D9DA9 /* httpserv.h in Headers */, - 17F6C6050F5F9D5B000D9DA9 /* jnetlib.h in Headers */, - 17F6C6070F5F9D5B000D9DA9 /* listen.h in Headers */, - 17F6C6090F5F9D5B000D9DA9 /* netinc.h in Headers */, - 17F6C60C0F5F9D5B000D9DA9 /* sslconnection.h in Headers */, - 17F6C60E0F5F9D5B000D9DA9 /* ssllisten.h in Headers */, - 17F6C6160F5F9D5B000D9DA9 /* udpconnection.h in Headers */, - 17F6C6180F5F9D5B000D9DA9 /* util.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 8DC2EF4F0486A6940098B216 /* JNetLib */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "JNetLib" */; - buildPhases = ( - 8DC2EF500486A6940098B216 /* Headers */, - 8DC2EF520486A6940098B216 /* Resources */, - 8DC2EF540486A6940098B216 /* Sources */, - 8DC2EF560486A6940098B216 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = JNetLib; - productInstallPath = "$(HOME)/Library/Frameworks"; - productName = JNetLib; - productReference = 8DC2EF5B0486A6940098B216 /* JNetLib.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 0867D690FE84028FC02AAC07 /* Project object */ = { - isa = PBXProject; - buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "JNetLib" */; - compatibilityVersion = "Xcode 3.1"; - hasScannedForEncodings = 1; - mainGroup = 0867D691FE84028FC02AAC07 /* JNetLib */; - productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8DC2EF4F0486A6940098B216 /* JNetLib */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8DC2EF520486A6940098B216 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8DC2EF540486A6940098B216 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 17F6C5F80F5F9D5B000D9DA9 /* asyncdns.cpp in Sources */, - 17F6C5FB0F5F9D5B000D9DA9 /* connection.cpp in Sources */, - 17F6C5FD0F5F9D5B000D9DA9 /* httpget.cpp in Sources */, - 17F6C5FF0F5F9D5B000D9DA9 /* httppost.cpp in Sources */, - 17F6C6010F5F9D5B000D9DA9 /* httpserv.cpp in Sources */, - 17F6C6060F5F9D5B000D9DA9 /* listen.cpp in Sources */, - 17F6C60B0F5F9D5B000D9DA9 /* sslconnection.cpp in Sources */, - 17F6C60D0F5F9D5B000D9DA9 /* ssllisten.cpp in Sources */, - 17F6C6170F5F9D5B000D9DA9 /* util.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 089C1667FE841158C02AAC07 /* English */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 1DEB91AE08733DA50010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@loader_path/../Frameworks"; - PRODUCT_NAME = JNetLib; - SYMROOT = ../../build; - WRAPPER_EXTENSION = framework; - }; - name = Debug; - }; - 1DEB91AF08733DA50010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - GCC_MODEL_TUNING = G5; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "@loader_path/../Frameworks"; - PRODUCT_NAME = JNetLib; - SYMROOT = ../../build; - WRAPPER_EXTENSION = framework; - }; - name = Release; - }; - 1DEB91B208733DA50010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - ONLY_ACTIVE_ARCH = YES; - PREBINDING = NO; - SDKROOT = macosx10.5; - }; - name = Debug; - }; - 1DEB91B308733DA50010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PREBINDING = NO; - SDKROOT = macosx10.5; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "JNetLib" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB91AE08733DA50010E9CD /* Debug */, - 1DEB91AF08733DA50010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "JNetLib" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB91B208733DA50010E9CD /* Debug */, - 1DEB91B308733DA50010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 0867D690FE84028FC02AAC07 /* Project object */; -} diff --git a/Frameworks/JNetLib/jnetlib/.DS_Store b/Frameworks/JNetLib/jnetlib/.DS_Store deleted file mode 100644 index c7218c523..000000000 Binary files a/Frameworks/JNetLib/jnetlib/.DS_Store and /dev/null differ diff --git a/Frameworks/JNetLib/jnetlib/CHANGES.txt b/Frameworks/JNetLib/jnetlib/CHANGES.txt deleted file mode 100755 index fee39b7f0..000000000 --- a/Frameworks/JNetLib/jnetlib/CHANGES.txt +++ /dev/null @@ -1,6 +0,0 @@ -+03/06/2006 Joshua Teitelbaum : Added file CHANGES.txt -+03/06/2006 Joshua Teitelbaum : Added file README.txt -+03/06/2006 Joshua Teitelbaum : Basic Integration with SSL -+03/06/2006 Joshua Teitelbaum : Added new HTTP POST Test -+03/06/2006 Joshua Teitelbaum : Added HTTPS Listen Test -+03/06/2006 Joshua Teitelbaum : Added HTTPS Get Test diff --git a/Frameworks/JNetLib/jnetlib/Makefile b/Frameworks/JNetLib/jnetlib/Makefile deleted file mode 100755 index 58cab477e..000000000 --- a/Frameworks/JNetLib/jnetlib/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# freebsd3 makefile -default: jnl.a - -LDFLAGS = -pthread -CFLAGS = -s -O2 -Wall -DTHREAD_SAFE -D_THREAD_SAFE -D_REENTRANT -CC = gcc -CPP = g++ -CXX = g++ - -OBJS = asyncdns.o connection.o httpget.o httpserv.o listen.o util.o sercon.o - -jnl.a: ${OBJS} - -rm -f jnl.a - ar rcs jnl.a ${OBJS} - -test: ${OBJS} test.o - $(CC) ${CFLAGS} -o test test.o ${OBJS} ${LDFLAGS} - -clean: - -rm -f ${OBJS} test jnl.a test.o diff --git a/Frameworks/JNetLib/jnetlib/README.txt b/Frameworks/JNetLib/jnetlib/README.txt deleted file mode 100755 index 305c3e88c..000000000 --- a/Frameworks/JNetLib/jnetlib/README.txt +++ /dev/null @@ -1,76 +0,0 @@ -JNetLib Readme.txt -/* -** -** Justin Frankel -** www.cockos.com -** -** Joshua Teitelbaum -** www.cryptomail.org -*/ - -Table of Contents: - -I) License -II) Introduction -III) Features -IV) SSL Integration -V) Postamble - -I) License - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution - -II) Introduction - -Welcome to the JNetLib library, a C++ asynchronous network abstraction layer. - -III) Features - -* Works under Linux, FreeBSD, Win32, and other operating systems. -* TCP connections support -* Listening sockets support -* Asynchronous DNS support -* HTTP serving and getting support (including basic authentication, GET/POST and HTTP/1.1 support) -* Basic HTTPS serving, getting support (including basic authentication, and HTTP/1.1 support) -* Completely asynchronous love for single threaded apps. -* Coming soon: support for UDP, as well as serial i/o. - -IV) SSL Integration - -JNetLib now employs the OpenSSL encryption library from www.openssl.org. -However, it is not compiled in as the default. -If you would like to have SSL support compiled in you have to: -1) uncomment the #define _JNETLIB_SSL_ 1 in netinc.h -2) Obtain the openssl requisite libraries libeay32.lib and ssleay32.lib -2a) You can obtain these libraries either by building them yourself via aquring the source yourself or... -2b) Download the SSL quickpack for windows, and ensure that you have the SSL quickpack in your build environment -You will need the proper include and library paths. -If you downloaded the quickpack to C:\, then the appropriate build environment include directory would be "c:\openssl\include", and so forth. - -Disclaimer: -SSL functionality is new, and not entirely feature complete. -The current certification authentication tactic is to allow all certificates through, without checking any CA signatures. - - -V) Postamble -Questions/Comments -joshuat@cryptomail.org - - - - - diff --git a/Frameworks/JNetLib/jnetlib/asyncdns.cpp b/Frameworks/JNetLib/jnetlib/asyncdns.cpp deleted file mode 100755 index f0bcb38be..000000000 --- a/Frameworks/JNetLib/jnetlib/asyncdns.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: asyncdns.cpp - JNL portable asynchronous DNS implementation -** License: see jnetlib.h -*/ - -#include "netinc.h" -#include "util.h" -#include "asyncdns.h" - -JNL_AsyncDNS::JNL_AsyncDNS(int max_cache_entries) -{ - m_thread_kill=1; - m_thread=0; - m_cache_size=max_cache_entries; - m_cache=(cache_entry *)::malloc(sizeof(cache_entry)*m_cache_size); - memset(m_cache,0,sizeof(cache_entry)*m_cache_size); -} - -JNL_AsyncDNS::~JNL_AsyncDNS() -{ -#ifndef NO_DNS_SUPPORT - m_thread_kill=1; - -#ifdef _WIN32 - if (m_thread) - { - WaitForSingleObject(m_thread,INFINITE); - CloseHandle(m_thread); - } -#else - if (m_thread) - { - void *p; - pthread_join(m_thread,&p); - } -#endif//!_WIN32 -#endif//NO_DNS_SUPPORT - free(m_cache); -} - -#ifdef _WIN32 -unsigned long WINAPI JNL_AsyncDNS::_threadfunc(LPVOID _d) -#else -unsigned int JNL_AsyncDNS::_threadfunc(void *_d) -#endif -{ -#ifndef NO_DNS_SUPPORT - int nowinsock=JNL::open_socketlib(); - JNL_AsyncDNS *_this=(JNL_AsyncDNS*)_d; - int x; - for (x = 0; x < _this->m_cache_size && !_this->m_thread_kill; x ++) - { - if (_this->m_cache[x].last_used && !_this->m_cache[x].resolved) - { - if (!nowinsock) - { - if (_this->m_cache[x].mode==0) - { - struct hostent *hostentry; - hostentry=::gethostbyname(_this->m_cache[x].hostname); - if (hostentry) - { - _this->m_cache[x].addr=*((int*)hostentry->h_addr); - } - else - _this->m_cache[x].addr=INADDR_NONE; - } - else if (_this->m_cache[x].mode==1) - { - struct hostent *ent; - ent=::gethostbyaddr((const char *)&_this->m_cache[x].addr,4,AF_INET); - if (ent) - { - strncpy(_this->m_cache[x].hostname,ent->h_name,255); - _this->m_cache[x].hostname[255]=0; - } - else - { - _this->m_cache[x].hostname[0]=0; - } - } - _this->m_cache[x].resolved=1; - } - else - { - if (_this->m_cache[x].mode==0) - { - _this->m_cache[x].addr=INADDR_NONE; - _this->m_cache[x].resolved=1; - } - else if (_this->m_cache[x].mode==1) - { - _this->m_cache[x].hostname[0]=0; - _this->m_cache[x].resolved=1; - } - } - } - } - if (!nowinsock) JNL::close_socketlib(); - _this->m_thread_kill=1; -#endif // NO_DNS_SUPPORT - - return 0; -} - -int JNL_AsyncDNS::resolve(char *hostname, unsigned long *addr) -{ - // return 0 on success, 1 on wait, -1 on unresolvable - int x; - unsigned long ip=inet_addr(hostname); - if (ip != INADDR_NONE) - { - *addr=ip; - return 0; - } -#ifndef NO_DNS_SUPPORT - - for (x = 0; x < m_cache_size; x ++) - { - if (!strcasecmp(m_cache[x].hostname,hostname) && m_cache[x].mode==0) - { - m_cache[x].last_used=time(NULL); - if (m_cache[x].resolved) - { - if (m_cache[x].addr == INADDR_NONE) - { - return -1; - } - struct in_addr in; - in.s_addr=m_cache[x].addr; - *addr=m_cache[x].addr; - return 0; - } - makesurethreadisrunning(); - return 1; - } - } - // add to resolve list - int oi=-1; - for (x = 0; x < m_cache_size; x ++) - { - if (!m_cache[x].last_used) - { - oi=x; - break; - } - if ((oi==-1 || m_cache[x].last_used < m_cache[oi].last_used) && m_cache[x].resolved) - { - oi=x; - } - } - if (oi == -1) - { - return -1; - } - strcpy(m_cache[oi].hostname,hostname); - m_cache[oi].mode=0; - m_cache[oi].addr=INADDR_NONE; - m_cache[oi].resolved=0; - m_cache[oi].last_used=time(NULL); - - makesurethreadisrunning(); - return 1; -#else - return -1; -#endif -} - -int JNL_AsyncDNS::reverse(unsigned long addr, char *hostname) -{ - // return 0 on success, 1 on wait, -1 on unresolvable - int x; - if (addr == INADDR_NONE) - { - return -1; - } -#ifndef NO_DNS_SUPPORT - for (x = 0; x < m_cache_size; x ++) - { - if (m_cache[x].addr==addr && m_cache[x].mode==1) - { - m_cache[x].last_used=time(NULL); - if (m_cache[x].resolved) - { - if (!m_cache[x].hostname[0]) - { - return -1; - } - strncpy(hostname,m_cache[x].hostname,255); - hostname[255]=0; - return 0; - } - makesurethreadisrunning(); - return 1; - } - } - // add to resolve list - int oi=-1; - for (x = 0; x < m_cache_size; x ++) - { - if (!m_cache[x].last_used) - { - oi=x; - break; - } - if ((oi==-1 || m_cache[x].last_used < m_cache[oi].last_used) && m_cache[x].resolved) - { - oi=x; - } - } - if (oi == -1) - { - return -1; - } - m_cache[oi].addr=addr; - m_cache[oi].hostname[0]=0; - m_cache[oi].resolved=0; - m_cache[oi].mode=1; - m_cache[oi].last_used=time(NULL); - - makesurethreadisrunning(); - return 1; -#else - return -1; -#endif -} - - -void JNL_AsyncDNS::makesurethreadisrunning(void) -{ -#ifndef NO_DNS_SUPPORT - if (m_thread_kill) - { - #ifdef _WIN32 - if (m_thread) - { - WaitForSingleObject(m_thread,INFINITE); - CloseHandle(m_thread); - } - DWORD id; - m_thread_kill=0; - m_thread=CreateThread(NULL,0,_threadfunc,(LPVOID)this,0,&id); - if (!m_thread) - { - #else - if (m_thread) - { - void *p; - pthread_join(m_thread,&p); - } - m_thread_kill=0; - if (pthread_create(&m_thread,NULL,(void *(*) (void *))_threadfunc,(void*)this) != 0) - { - #endif - m_thread_kill=1; - } - } -#endif//NO_DNS_SUPPORT -} diff --git a/Frameworks/JNetLib/jnetlib/asyncdns.h b/Frameworks/JNetLib/jnetlib/asyncdns.h deleted file mode 100755 index 527088896..000000000 --- a/Frameworks/JNetLib/jnetlib/asyncdns.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: asyncdns.h - JNL portable asynchronous DNS interface -** License: see jnetlib.h -** -** Usage: -** 1. Create JNL_AsyncDNS object, optionally with the number of cache entries. -** 2. call resolve() to resolve a hostname into an address. The return value of -** resolve is 0 on success (host successfully resolved), 1 on wait (meaning -** try calling resolve() with the same hostname in a few hundred milliseconds -** or so), or -1 on error (i.e. the host can't resolve). -** 3. call reverse() to do reverse dns (ala resolve()). -** 4. enjoy. -*/ - -#ifndef _ASYNCDNS_H_ -#define _ASYNCDNS_H_ - -class JNL_AsyncDNS -{ -public: - JNL_AsyncDNS(int max_cache_entries=64); - ~JNL_AsyncDNS(); - - int resolve(char *hostname, unsigned long *addr); // return 0 on success, 1 on wait, -1 on unresolvable - int reverse(unsigned long addr, char *hostname); // return 0 on success, 1 on wait, -1 on unresolvable. hostname must be at least 256 bytes. - -private: - typedef struct - { - int last_used; // timestamp. - char resolved; - char mode; // 1=reverse - char hostname[256]; - unsigned long addr; - } - cache_entry; - - cache_entry *m_cache; - int m_cache_size; - volatile int m_thread_kill; -#ifdef _WIN32 - HANDLE m_thread; - static unsigned long WINAPI _threadfunc(LPVOID _d); -#else - pthread_t m_thread; - static unsigned int _threadfunc(void *_d); -#endif - void makesurethreadisrunning(void); - -}; - -#endif //_ASYNCDNS_H_ diff --git a/Frameworks/JNetLib/jnetlib/connection.cpp b/Frameworks/JNetLib/jnetlib/connection.cpp deleted file mode 100755 index 28f09977f..000000000 --- a/Frameworks/JNetLib/jnetlib/connection.cpp +++ /dev/null @@ -1,520 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: connection.cpp - JNL TCP connection implementation -** License: see jnetlib.h -*/ - -#include "netinc.h" -#include "util.h" -#include "connection.h" - - -JNL_Connection::JNL_Connection(JNL_AsyncDNS *dns, int sendbufsize, int recvbufsize) -{ - m_errorstr=""; - if (dns == JNL_CONNECTION_AUTODNS) - { - m_dns=new JNL_AsyncDNS(); - m_dns_owned=1; - } - else - { - m_dns=dns; - m_dns_owned=0; - } - m_recv_buffer_len=recvbufsize; - m_send_buffer_len=sendbufsize; - m_recv_buffer=(char*)malloc(m_recv_buffer_len); - m_send_buffer=(char*)malloc(m_send_buffer_len); - m_socket=-1; - memset(m_recv_buffer,0,recvbufsize); - memset(m_send_buffer,0,sendbufsize); - m_remote_port=0; - m_state=STATE_NOCONNECTION; - m_recv_len=m_recv_pos=0; - m_send_len=m_send_pos=0; - m_host[0]=0; - m_saddr = new struct sockaddr_in; - memset(m_saddr,0,sizeof(m_saddr)); -} - -void JNL_Connection::connect(int s, struct sockaddr_in *loc) -{ - close(1); - m_socket=s; - m_remote_port=0; - m_dns=NULL; - if (loc) *m_saddr=*loc; - else memset(m_saddr,0,sizeof(m_saddr)); - if (m_socket != -1) - { - SET_SOCK_BLOCK(m_socket,0); - m_state=STATE_CONNECTED; - } - else - { - m_errorstr="invalid socket passed to connect"; - m_state=STATE_ERROR; - } -} - -void JNL_Connection::connect(char *hostname, int port) -{ - close(1); - m_remote_port=(short)port; - m_socket=::socket(AF_INET,SOCK_STREAM,0); - if (m_socket==-1) - { - m_errorstr="creating socket"; - m_state=STATE_ERROR; - } - else - { - SET_SOCK_BLOCK(m_socket,0); - strncpy(m_host,hostname,sizeof(m_host)-1); - m_host[sizeof(m_host)-1]=0; - memset(m_saddr,0,sizeof(m_saddr)); - if (!m_host[0]) - { - m_errorstr="empty hostname"; - m_state=STATE_ERROR; - } - else - { - m_state=STATE_RESOLVING; - m_saddr->sin_family=AF_INET; - m_saddr->sin_port=htons((unsigned short)port); - m_saddr->sin_addr.s_addr=inet_addr(hostname); - } - } -} - -/* -** Joshua Teitelbaum 1/27/2006 -** socket_shutdown -** virtualization for ssl -*/ -/* Virtual */ -void JNL_Connection::socket_shutdown() -{ - if (m_socket >= 0) - { - ::shutdown(m_socket, SHUT_RDWR); - ::closesocket(m_socket); - m_socket=-1; - } -} -/* -** Joshua Teitelbaum 1/27/2006 -** socket_recv -** virtualization for ssl -*/ -/* Virtual */ -int JNL_Connection::socket_recv(char *buf, int len, int options) -{ - return ::recv(m_socket,buf,len,options); -} -/* -** Joshua Teitelbaum 1/27/2006 -** socket_send -** virtualization for ssl -*/ -/* Virtual */ -int JNL_Connection::socket_send(char *buf, int len, int options) -{ - return ::send(m_socket,buf,len,options); -} - -int JNL_Connection::socket_connect() -{ - return ::connect(m_socket,(struct sockaddr *)m_saddr,16); -} -JNL_Connection::~JNL_Connection() -{ - /* - ** Joshua Teitelbaum 1/27/2006 - ** virtualization for ssl, calling socket_shtudown() - */ - socket_shutdown(); - - free(m_recv_buffer); - free(m_send_buffer); - if (m_dns_owned) - { - delete m_dns; - } - delete m_saddr; -} - -void JNL_Connection::run(int max_send_bytes, int max_recv_bytes, int *bytes_sent, int *bytes_rcvd) -{ - int bytes_allowed_to_send=(max_send_bytes<0)?m_send_buffer_len:max_send_bytes; - int bytes_allowed_to_recv=(max_recv_bytes<0)?m_recv_buffer_len:max_recv_bytes; - - if (bytes_sent) *bytes_sent=0; - if (bytes_rcvd) *bytes_rcvd=0; - - switch (m_state) - { - case STATE_RESOLVING: - if (m_saddr->sin_addr.s_addr == INADDR_NONE) - { - int a=m_dns?m_dns->resolve(m_host,(unsigned long int *)&m_saddr->sin_addr.s_addr):-1; - if (!a) { m_state=STATE_CONNECTING; } - else if (a == 1) - { - m_state=STATE_RESOLVING; - break; - } - else - { - m_errorstr="resolving hostname"; - m_state=STATE_ERROR; - return; - } - } - /* - ** Joshua Teitelbaum 1/27/2006 - ** virtualization for ssl - */ - if(!socket_connect()) - { - m_state=STATE_CONNECTED; - on_socket_connected(); - } - else if (ERRNO!=EINPROGRESS) - { - m_errorstr="connecting to host"; - m_state=STATE_ERROR; - } - else { m_state=STATE_CONNECTING; } - break; - case STATE_CONNECTING: - { - fd_set f[3]; - FD_ZERO(&f[0]); - FD_ZERO(&f[1]); - FD_ZERO(&f[2]); - FD_SET(m_socket,&f[0]); - FD_SET(m_socket,&f[1]); - FD_SET(m_socket,&f[2]); - struct timeval tv; - memset(&tv,0,sizeof(tv)); - if (select(m_socket+1,&f[0],&f[1],&f[2],&tv)==-1) - { - m_errorstr="connecting to host (calling select())"; - m_state=STATE_ERROR; - } - else if (FD_ISSET(m_socket,&f[1])) - { - m_state=STATE_CONNECTED; - on_socket_connected(); - } - else if (FD_ISSET(m_socket,&f[2])) - { - m_errorstr="connecting to host"; - m_state=STATE_ERROR; - } - } - break; - case STATE_CONNECTED: - case STATE_CLOSING: - if (m_send_len>0 && bytes_allowed_to_send>0) - { - int len=m_send_buffer_len-m_send_pos; - if (len > m_send_len) len=m_send_len; - if (len > bytes_allowed_to_send) len=bytes_allowed_to_send; - if (len > 0) - { - int res=socket_send(m_send_buffer+m_send_pos,len,0); - if (res==-1 && ERRNO != EWOULDBLOCK) - { -// m_state=STATE_CLOSED; -// return; - } - if (res>0) - { - bytes_allowed_to_send-=res; - if (bytes_sent) *bytes_sent+=res; - m_send_pos+=res; - m_send_len-=res; - } - } - if (m_send_pos>=m_send_buffer_len) - { - m_send_pos=0; - if (m_send_len>0) - { - len=m_send_buffer_len-m_send_pos; - if (len > m_send_len) len=m_send_len; - if (len > bytes_allowed_to_send) len=bytes_allowed_to_send; - int res=socket_send(m_send_buffer+m_send_pos,len,0); - if (res==-1 && ERRNO != EWOULDBLOCK) - { -// m_state=STATE_CLOSED; - } - if (res>0) - { - bytes_allowed_to_send-=res; - if (bytes_sent) *bytes_sent+=res; - m_send_pos+=res; - m_send_len-=res; - } - } - } - } - if (m_recv_len m_recv_buffer_len-m_recv_len) len=m_recv_buffer_len-m_recv_len; - if (len > bytes_allowed_to_recv) len=bytes_allowed_to_recv; - if (len>0) - { - /* - ** Joshua Teitelbaum 1/27/2006 - ** virtualization for SSL - */ - int res = socket_recv(m_recv_buffer+m_recv_pos,len,0); - - if (res == 0 || (res < 0 && ERRNO != EWOULDBLOCK)) - { - m_state=STATE_CLOSED; - break; - } - if (res > 0) - { - bytes_allowed_to_recv-=res; - if (bytes_rcvd) *bytes_rcvd+=res; - m_recv_pos+=res; - m_recv_len+=res; - } - } - if (m_recv_pos >= m_recv_buffer_len) - { - m_recv_pos=0; - if (m_recv_len < m_recv_buffer_len) - { - len=m_recv_buffer_len-m_recv_len; - if (len > bytes_allowed_to_recv) len=bytes_allowed_to_recv; - if (len > 0) - { - int res=socket_recv(m_recv_buffer+m_recv_pos,len,0); - if (res == 0 || (res < 0 && ERRNO != EWOULDBLOCK)) - { - m_state=STATE_CLOSED; - break; - } - if (res > 0) - { - bytes_allowed_to_recv-=res; - if (bytes_rcvd) *bytes_rcvd+=res; - m_recv_pos+=res; - m_recv_len+=res; - } - } - } - } - } - if (m_state == STATE_CLOSING) - { - if (m_send_len < 1) m_state = STATE_CLOSED; - } - break; - default: break; - } -} - -void JNL_Connection::on_socket_connected(void) -{ - return; -} -void JNL_Connection::close(int quick) -{ - if (quick || m_state == STATE_RESOLVING || m_state == STATE_CONNECTING) - { - m_state=STATE_CLOSED; - /* - ** Joshua Teitelbaum 1/27/2006 - ** virualization for ssl - */ - socket_shutdown(); - - m_socket=-1; - memset(m_recv_buffer,0,m_recv_buffer_len); - memset(m_send_buffer,0,m_send_buffer_len); - m_remote_port=0; - m_recv_len=m_recv_pos=0; - m_send_len=m_send_pos=0; - m_host[0]=0; - memset(m_saddr,0,sizeof(m_saddr)); - } - else - { - if (m_state == STATE_CONNECTED) m_state=STATE_CLOSING; - } -} - -int JNL_Connection::send_bytes_in_queue(void) -{ - return m_send_len; -} - -int JNL_Connection::send_bytes_available(void) -{ - return m_send_buffer_len-m_send_len; -} - -int JNL_Connection::send(const void *_data, int length) -{ - const char *data = static_cast(_data); - if (length > send_bytes_available()) - { - return -1; - } - - int write_pos=m_send_pos+m_send_len; - if (write_pos >= m_send_buffer_len) - { - write_pos-=m_send_buffer_len; - } - - int len=m_send_buffer_len-write_pos; - if (len > length) - { - len=length; - } - - memcpy(m_send_buffer+write_pos,data,len); - if (length > len) - { - memcpy(m_send_buffer,data+len,length-len); - } - m_send_len+=length; - return 0; -} - -int JNL_Connection::send_string(const char *line) -{ - return send(line,strlen(line)); -} - -int JNL_Connection::recv_bytes_available(void) -{ - return m_recv_len; -} - -int JNL_Connection::peek_bytes(void *_data, int maxlength) -{ - char *data = static_cast(_data); - if (maxlength > m_recv_len) - { - maxlength=m_recv_len; - } - int read_pos=m_recv_pos-m_recv_len; - if (read_pos < 0) - { - read_pos += m_recv_buffer_len; - } - int len=m_recv_buffer_len-read_pos; - if (len > maxlength) - { - len=maxlength; - } - if (data != NULL) { - memcpy(data,m_recv_buffer+read_pos,len); - if (len < maxlength) - { - memcpy(data+len,m_recv_buffer,maxlength-len); - } - } - - return maxlength; -} - -int JNL_Connection::recv_bytes(void *_data, int maxlength) -{ - char *data = static_cast(_data); - - int ml=peek_bytes(data,maxlength); - m_recv_len-=ml; - return ml; -} - -int JNL_Connection::getbfromrecv(int pos, int remove) -{ - int read_pos=m_recv_pos-m_recv_len + pos; - if (pos < 0 || pos > m_recv_len) return -1; - if (read_pos < 0) - { - read_pos += m_recv_buffer_len; - } - if (read_pos >= m_recv_buffer_len) - { - read_pos-=m_recv_buffer_len; - } - if (remove) m_recv_len--; - return m_recv_buffer[read_pos]; -} - -int JNL_Connection::recv_lines_available(void) -{ - int l=recv_bytes_available(); - int lcount=0; - int lastch=0; - int pos; - for (pos=0; pos < l; pos ++) - { - int t=getbfromrecv(pos,0); - if (t == -1) return lcount; - if ((t=='\r' || t=='\n') &&( - (lastch != '\r' && lastch != '\n') || lastch==t - )) lcount++; - lastch=t; - } - return lcount; -} - -int JNL_Connection::recv_line(char *line, int maxlength) -{ - if (maxlength > m_recv_len) maxlength=m_recv_len; - while (maxlength--) - { - int t=getbfromrecv(0,1); - if (t == -1) - { - *line=0; - return 0; - } - if (t == '\r' || t == '\n') - { - int r=getbfromrecv(0,0); - if ((r == '\r' || r == '\n') && r != t) getbfromrecv(0,1); - *line=0; - return 0; - } - *line++=(char)t; - } - return 1; -} - -unsigned long JNL_Connection::get_interface(void) -{ - if (m_socket==-1) return 0; - struct sockaddr_in sin; - memset(&sin,0,sizeof(sin)); - socklen_t len=16; - if (::getsockname(m_socket,(struct sockaddr *)&sin,&len)) return 0; - return (unsigned long) sin.sin_addr.s_addr; -} - -unsigned long JNL_Connection::get_remote() -{ - return m_saddr->sin_addr.s_addr; -} - -short JNL_Connection::get_remote_port() -{ - return m_remote_port; -} diff --git a/Frameworks/JNetLib/jnetlib/connection.h b/Frameworks/JNetLib/jnetlib/connection.h deleted file mode 100755 index 1443364a5..000000000 --- a/Frameworks/JNetLib/jnetlib/connection.h +++ /dev/null @@ -1,153 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: connection.h - JNL TCP connection interface -** License: see jnetlib.h -** -** Usage: -** 1. Create a JNL_Connection object, optionally specifying a JNL_AsyncDNS -** object to use (or NULL for none, or JNL_CONNECTION_AUTODNS for auto), -** and the send and receive buffer sizes. -** 2. Call connect() to have it connect to a host/port (the hostname will be -** resolved if possible). -** 3. call run() with the maximum send/recv amounts, and optionally parameters -** so you can tell how much has been send/received. You want to do this a lot, while: -** 4. check get_state() to check the state of the connection. The states are: -** JNL_Connection::STATE_ERROR -** - an error has occured on the connection. the connection has closed, -** and you can no longer write to the socket (there still might be -** data in the receive buffer - use recv_bytes_available()). -** JNL_Connection::STATE_NOCONNECTION -** - no connection has been made yet. call connect() already! :) -** JNL_Connection::STATE_RESOLVING -** - the connection is still waiting for a JNL_AsycnDNS to resolve the -** host. -** JNL_Connection::STATE_CONNECTING -** - the asynchronous call to connect() is still running. -** JNL_Connection::STATE_CONNECTED -** - the connection has connected, all is well. -** JNL_Connection::STATE_CLOSING -** - the connection is closing. This happens after a call to close, -** without the quick parameter set. This means that the connection -** will close once the data in the send buffer is sent (data could -** still be being received when it would be closed). After it is -** closed, the state will transition to: -** JNL_Connection::STATE_CLOSED -** - the connection has closed, generally without error. There still -** might be data in the receieve buffer, use recv_bytes_available(). -** 5. Use send() and send_string() to send data. You can use -** send_bytes_in_queue() to see how much has yet to go out, or -** send_bytes_available() to see how much you can write. If you use send() -** or send_string() and not enough room is available, both functions will -** return error ( < 0) -** 6. Use recv() and recv_line() to get data. If you want to see how much data -** there is, use recv_bytes_available() and recv_lines_available(). If you -** call recv() and not enough data is available, recv() will return how much -** data was actually read. See comments at the function defs. -** -** 7. To close, call close(1) for a quick close, or close() for a close that will -** make the socket close after sending all the data sent. -** -** 8. delete ye' ol' object. -*/ - -#ifndef _CONNECTION_H_ -#define _CONNECTION_H_ - -#include "asyncdns.h" - -#define JNL_CONNECTION_AUTODNS ((JNL_AsyncDNS*)-1) - -struct sockaddr_in; - -class JNL_Connection -{ - public: - typedef enum - { - STATE_ERROR, - STATE_NOCONNECTION, - STATE_RESOLVING, - STATE_CONNECTING, - STATE_CONNECTED, - STATE_CLOSING, - STATE_CLOSED - } state; - - /* - ** Joshua Teitelbaum, 1/27/2006 adding virtual - */ - JNL_Connection(JNL_AsyncDNS *dns=JNL_CONNECTION_AUTODNS, int sendbufsize=8192, int recvbufsize=8192); - virtual ~JNL_Connection(); - -public: - void connect(char *hostname, int port); - virtual void connect(int sock, struct sockaddr_in *loc=NULL); // used by the listen object, usually not needed by users. - - /* - ** Joshua Teitelbaum 2/2/2006 - ** Need to make this virtual to ensure SSL can init properly - */ - virtual void run(int max_send_bytes=-1, int max_recv_bytes=-1, int *bytes_sent=NULL, int *bytes_rcvd=NULL); - int get_state() { return m_state; } - char *get_errstr() { return m_errorstr; } - - void close(int quick=0); - void flush_send(void) { m_send_len=m_send_pos=0; } - - int send_bytes_in_queue(void); - int send_bytes_available(void); - int send(const void *data, int length); // returns -1 if not enough room - inline int send_bytes(const void *data, int length) { return send(data, length); } - int send_string(const char *line); // returns -1 if not enough room - - - int recv_bytes_available(void); - int recv_bytes(void *data, int maxlength); // returns actual bytes read - unsigned int recv_int(void); - int recv_lines_available(void); - int recv_line(char *line, int maxlength); // returns 0 if the line was terminated with a \r or \n, 1 if not. - // (i.e. if you specify maxlength=10, and the line is 12 bytes long - // it will return 1. or if there is no \r or \n and that's all the data - // the connection has.) - int peek_bytes(void *data, int maxlength); // returns bytes peeked - - unsigned long get_interface(void); // this returns the interface the connection is on - unsigned long get_remote(void); // remote host ip. - short get_remote_port(void); // this returns the remote port of connection - - protected: - int m_socket; - short m_remote_port; - char *m_recv_buffer; - char *m_send_buffer; - int m_recv_buffer_len; - int m_send_buffer_len; - - int m_recv_pos; - int m_recv_len; - int m_send_pos; - int m_send_len; - - struct sockaddr_in *m_saddr; - char m_host[256]; - - JNL_AsyncDNS *m_dns; - int m_dns_owned; - - state m_state; - char *m_errorstr; - - int getbfromrecv(int pos, int remove); // used by recv_line* - /* - ** Joshua Teitelbaum 1/27/2006 Adding new BSD socket analogues for SSL compatibility - */ - virtual void socket_shutdown(); - virtual int socket_recv(char *buf, int len, int options); - virtual int socket_send(char *buf, int len, int options); - virtual int socket_connect(); - virtual void on_socket_connected(); -}; - -#endif // _Connection_H_ diff --git a/Frameworks/JNetLib/jnetlib/httpget.cpp b/Frameworks/JNetLib/jnetlib/httpget.cpp deleted file mode 100755 index 6b4a68eec..000000000 --- a/Frameworks/JNetLib/jnetlib/httpget.cpp +++ /dev/null @@ -1,490 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: httpget.cpp - JNL HTTP GET implementation -** License: see jnetlib.h -*/ - -/* -** Undefine this if you don't want SSL compiled in -*/ - -#include "netinc.h" -#include "util.h" -#include "httpget.h" -#include "sslconnection.h" - - -JNL_HTTPGet::JNL_HTTPGet(JNL_AsyncDNS *dns, int recvbufsize, char *proxy) -{ - m_recvbufsize=recvbufsize; - m_dns=dns; - m_con=NULL; - m_http_proxylpinfo=0; - m_http_proxyhost=0; - m_http_proxyport=0; - if (proxy && *proxy) - { - char *p=(char*)malloc(strlen(proxy)+1); - if (p) - { - char *r=NULL; - strcpy(p,proxy); - do_parse_url(p,&m_http_proxyhost,&m_http_proxyport,&r,&m_http_proxylpinfo); - free(r); - free(p); - } - } - m_sendheaders=NULL; - m_http_redir_url=0; - reinit(); -} - -void JNL_HTTPGet::reinit() -{ - m_errstr=0; - m_recvheaders=NULL; - m_recvheaders_size=0; - m_http_state=0; - m_http_port=0; - m_http_url=0; - m_reply=0; - m_http_host=m_http_lpinfo=m_http_request=NULL; -} - -void JNL_HTTPGet::deinit() -{ - delete m_con; m_con = NULL; - free(m_recvheaders); - - free(m_http_url); - free(m_http_host); - free(m_http_lpinfo); - free(m_http_request); - free(m_errstr); - free(m_reply); - reinit(); -} - -JNL_HTTPGet::~JNL_HTTPGet() -{ - deinit(); - free(m_sendheaders); - free(m_http_proxylpinfo); - free(m_http_proxyhost); - free(m_http_redir_url); - -} - - -void JNL_HTTPGet::addheader(const char *header) -{ - if (strstr(header,"\r") || strstr(header,"\n")) return; - if (!m_sendheaders) - { - m_sendheaders=(char*)malloc(strlen(header)+3); - if (m_sendheaders) - { - strcpy(m_sendheaders,header); - strcat(m_sendheaders,"\r\n"); - } - } - else - { - char *t=(char*)malloc(strlen(header)+strlen(m_sendheaders)+1+2); - if (t) - { - strcpy(t,m_sendheaders); - strcat(t,header); - strcat(t,"\r\n"); - free(m_sendheaders); - m_sendheaders=t; - } - } -} - -void JNL_HTTPGet::do_encode_mimestr(char *in, char *out) -{ - char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - int shift = 0; - int accum = 0; - - while (*in) - { - if (*in) - { - accum <<= 8; - shift += 8; - accum |= *in++; - } - while ( shift >= 6 ) - { - shift -= 6; - *out++ = alphabet[(accum >> shift) & 0x3F]; - } - } - if (shift == 4) - { - *out++ = alphabet[(accum & 0xF)<<2]; - *out++='='; - } - else if (shift == 2) - { - *out++ = alphabet[(accum & 0x3)<<4]; - *out++='='; - *out++='='; - } - - *out++=0; -} - - -void JNL_HTTPGet::connect(const char *url, int ver, char *requestmethod) -{ - deinit(); - m_http_url=(char*)malloc(strlen(url)+1); - strcpy(m_http_url,url); - do_parse_url(m_http_url,&m_http_host,&m_http_port,&m_http_request, &m_http_lpinfo); - strcpy(m_http_url,url); - if (!m_http_host || !m_http_host[0] || !m_http_port) - { - m_http_state=-1; - seterrstr("invalid URL"); - return; - } - - int sendbufferlen=0; - - if (!m_http_proxyhost || !m_http_proxyhost[0]) - { - sendbufferlen += strlen(requestmethod)+1 /* GET */ + strlen(m_http_request) + 9 /* HTTP/1.0 */ + 2; - } - else - { - sendbufferlen += strlen(requestmethod)+1 /* GET */ + strlen(m_http_url) + 9 /* HTTP/1.0 */ + 2; - if (m_http_proxylpinfo&&m_http_proxylpinfo[0]) - { - sendbufferlen+=58+strlen(m_http_proxylpinfo)*2; // being safe here - } - } - sendbufferlen += 5 /* Host: */ + strlen(m_http_host) + 2; - - if (m_http_lpinfo&&m_http_lpinfo[0]) - { - sendbufferlen+=46+strlen(m_http_lpinfo)*2; // being safe here - } - - if (m_sendheaders) sendbufferlen+=strlen(m_sendheaders); - - char *str=(char*)malloc(sendbufferlen+1024); - if (!str) - { - seterrstr("error allocating memory"); - m_http_state=-1; - } - - if (!m_http_proxyhost || !m_http_proxyhost[0]) - { - wsprintf(str,"%s %s HTTP/1.%d\r\n",requestmethod,m_http_request,ver%10); - } - else - { - wsprintf(str,"%s %s HTTP/1.%d\r\n",requestmethod, m_http_url,ver%10); - } - - wsprintf(str+strlen(str),"Host:%s\r\n",m_http_host); - - if (m_http_lpinfo&&m_http_lpinfo[0]) - { - strcat(str,"Authorization: Basic "); - do_encode_mimestr(m_http_lpinfo,str+strlen(str)); - strcat(str,"\r\n"); - } - if (m_http_proxylpinfo&&m_http_proxylpinfo[0]) - { - strcat(str,"Proxy-Authorization: Basic "); - do_encode_mimestr(m_http_proxylpinfo,str+strlen(str)); - strcat(str,"\r\n"); - } - - if (m_sendheaders) strcat(str,m_sendheaders); - strcat(str,"\r\n"); - - int a=m_recvbufsize; - if (a < 4096) a=4096; - //m_con=new JNL_Connection(m_dns,strlen(str)+4,a); - /* - ** Joshua Teitelbaum delta 1/15/2006 - */ -#ifdef _JNETLIB_SSL_ - /* - ** Joshua Teitelbaum 1/27/2006 - ** Check for secure - */ - if(!strnicmp(m_http_url,"https:",strlen("https:"))) - { - m_con=new JNL_SSL_Connection(NULL,m_dns,8192,a); - } - else - { - m_con=new JNL_Connection(m_dns,8192,a); - } -#else - m_con=new JNL_Connection(m_dns,8192,a); -#endif - - if (m_con) - { - if (!m_http_proxyhost || !m_http_proxyhost[0]) - { - m_con->connect(m_http_host,m_http_port); - } - else - { - m_con->connect(m_http_proxyhost,m_http_proxyport); - } - m_con->send_string(str); - } - else - { - m_http_state=-1; - seterrstr("could not create connection object"); - } - free(str); - -} - -void JNL_HTTPGet::do_parse_url(char *url, char **host, int *port, char **req, char **lp) -{ - char *p,*np; - free(*host); *host=0; - free(*req); *req=0; - free(*lp); *lp=0; - - if (strstr(url,"://")) np=p=strstr(url,"://")+3; - else np=p=url; - while (*np != '/' && *np) np++; - if (*np) - { - *req=(char*)malloc(strlen(np)+1); - if (*req) strcpy(*req,np); - *np++=0; - } - else - { - *req=(char*)malloc(2); - if (*req) strcpy(*req,"/"); - } - - np=p; - while (*np != '@' && *np) np++; - if (*np) - { - *np++=0; - *lp=(char*)malloc(strlen(p)+1); - if (*lp) strcpy(*lp,p); - p=np; - } - else - { - *lp=(char*)malloc(1); - if (*lp) strcpy(*lp,""); - } - np=p; - while (*np != ':' && *np) np++; - if (*np) - { - *np++=0; - *port=atoi(np); - } - else - { - /* - ** Joshua Teitelbaum 1/27/2006 - ** HTTPS enhancements - */ - if(!strnicmp(url,"https:",strlen("https:"))) - { - *port = 443; - } - else - *port=80; - } - *host=(char*)malloc(strlen(p)+1); - if (*host) strcpy(*host,p); - - -} - - -char *JNL_HTTPGet::getallheaders() -{ // double null terminated, null delimited list - if (m_recvheaders) return m_recvheaders; - else return "\0\0"; -} - -char *JNL_HTTPGet::getheader(char *headername) -{ - char *ret=NULL; - if (strlen(headername)<1||!m_recvheaders) return NULL; - char *buf=(char*)malloc(strlen(headername)+2); - strcpy(buf,headername); - if (buf[strlen(buf)-1]!=':') strcat(buf,":"); - char *p=m_recvheaders; - while (*p) - { - if (!strnicmp(buf,p,strlen(buf))) - { - ret=p+strlen(buf); - while (*ret == ' ') ret++; - break; - } - p+=strlen(p)+1; - } - free(buf); - return ret; -} - -int JNL_HTTPGet::run() -{ - int cnt=0; - if (m_http_state==-1||!m_con) return -1; // error - - -run_again: - m_con->run(); - - if (m_con->get_state()==JNL_Connection::STATE_ERROR) - { - seterrstr(m_con->get_errstr()); - return -1; - } - if (m_con->get_state()==JNL_Connection::STATE_CLOSED) return 1; - - if (m_http_state==0) // connected, waiting for reply - { - if (m_con->recv_lines_available()>0) - { - char buf[4096]; - m_con->recv_line(buf,4095); - buf[4095]=0; - m_reply=(char*)malloc(strlen(buf)+1); - strcpy(m_reply,buf); - - int code=getreplycode(); - if (code == 200 || code==206) m_http_state=2; // proceed to read headers normally - else if (code == 301 || code==302) - { - m_http_state=1; // redirect city - } - else - { - seterrstr(buf); - m_http_state=-1; - return -1; - } - cnt=0; - } - else if (!cnt++) goto run_again; - } - if (m_http_state == 1) // redirect - { - while (m_con->recv_lines_available() > 0) - { - char buf[4096]; - m_con->recv_line(buf,4096); - if (!buf[0]) - { - m_http_state=-1; - return -1; - } - if (!strnicmp(buf,"Location:",9)) - { - char *p=buf+9; while (*p== ' ') p++; - if (*p) - { - free(m_http_redir_url); - m_http_redir_url = strdup(p); - connect(p); - return 0; - } - } - } - } - if (m_http_state==2) - { - if (!cnt++ && m_con->recv_lines_available() < 1) goto run_again; - while (m_con->recv_lines_available() > 0) - { - char buf[4096]; - m_con->recv_line(buf,4096); - if (!buf[0]) { m_http_state=3; break; } - if (!m_recvheaders) - { - m_recvheaders_size=strlen(buf)+1; - m_recvheaders=(char*)malloc(m_recvheaders_size+1); - if (m_recvheaders) - { - strcpy(m_recvheaders,buf); - m_recvheaders[m_recvheaders_size]=0; - } - } - else - { - int oldsize=m_recvheaders_size; - m_recvheaders_size+=strlen(buf)+1; - char *n=(char*)malloc(m_recvheaders_size+1); - if (n) - { - memcpy(n,m_recvheaders,oldsize); - strcpy(n+oldsize,buf); - n[m_recvheaders_size]=0; - free(m_recvheaders); - m_recvheaders=n; - } - } - } - } - if (m_http_state==3) - { - } - return 0; -} - -int JNL_HTTPGet::get_status() // returns 0 if connecting, 1 if reading headers, - // 2 if reading content, -1 if error. -{ - if (m_http_state < 0) return -1; - if (m_http_state < 2) return 0; - if (m_http_state == 2) return 1; - if (m_http_state == 3) return 2; - return -1; -} - -int JNL_HTTPGet::getreplycode()// returns 0 if none yet, otherwise returns http reply code. -{ - if (!m_reply) return 0; - char *p=m_reply; - while (*p && *p != ' ') p++; // skip over HTTP/x.x - if (!*p) return 0; - return atoi(++p); -} - -int JNL_HTTPGet::bytes_available() -{ - if (m_con && m_http_state==3) return m_con->recv_bytes_available(); - return 0; -} -char *JNL_HTTPGet::getredirurl() { return m_http_redir_url; } - -int JNL_HTTPGet::get_bytes(char *buf, int len) -{ - if (m_con && m_http_state==3) return m_con->recv_bytes(buf,len); - return 0; -} -int JNL_HTTPGet::peek_bytes(char *buf, int len) -{ - if (m_con && m_http_state==3) return m_con->peek_bytes(buf,len); - return 0; -} diff --git a/Frameworks/JNetLib/jnetlib/httpget.h b/Frameworks/JNetLib/jnetlib/httpget.h deleted file mode 100755 index 2635a37e0..000000000 --- a/Frameworks/JNetLib/jnetlib/httpget.h +++ /dev/null @@ -1,112 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: httpget.h - JNL interface for doing HTTP GETs. -** License: see jnetlib.h -** -** Usage: -** 1. Create a JNL_HTTPGet object, optionally specifying a JNL_AsyncDNS -** object to use (or NULL for none, or JNL_CONNECTION_AUTODNS for auto), -** and the receive buffer size, and a string specifying proxy (or NULL -** for none). See note on proxy string below. -** 2. call addheader() to add whatever headers you want. It is recommended to -** add at least the following two: -** addheader("User-Agent:MyApp (Mozilla)"); -*/// addheader("Accept:*/*"); -/* ( the comment weirdness is there so I Can do the star-slash :) -** 3. Call connect() with the URL you wish to GET (see URL string note below) -** 4. Call run() once in a while, checking to see if it returns -1 -** (if it does return -1, call geterrorstr() to see what the error is). -** (if it returns 1, no big deal, the connection has closed). -** 5. While you're at it, you can call bytes_available() to see if any data -** from the http stream is available, or getheader() to see if any headers -** are available, or getreply() to see the HTTP reply, or getallheaders() -** to get a double null terminated, null delimited list of headers returned. -** 6. If you want to read from the stream, call get_bytes (which returns how much -** was actually read). -** 7. content_length() is a helper function that uses getheader() to check the -** content-length header. -** 8. Delete ye' ol' object when done. -** -** Proxy String: -** should be in the format of host:port, or user@host:port, or -** user:password@host:port. if port is not specified, 80 is assumed. -** URL String: -** should be in the format of http://user:pass@host:port/requestwhatever -** note that user, pass, port, and /requestwhatever are all optional :) -** note that also, http:// is really not important. if you do poo:// -** or even leave out the http:// altogether, it will still work. -*/ - -#ifndef _HTTPGET_H_ -#define _HTTPGET_H_ - -#include "connection.h" - -class JNL_HTTPGet -{ - public: - JNL_HTTPGet(JNL_AsyncDNS *dns=JNL_CONNECTION_AUTODNS, int recvbufsize=16384, char *proxy=NULL); - ~JNL_HTTPGet(); - - void addheader(const char *header); - - void connect(const char *url, int ver=0, char *requestmethod="GET"); - - int run(); // returns: 0 if all is OK. -1 if error (call geterrorstr()). 1 if connection closed. - - int get_status(); // returns 0 if connecting, 1 if reading headers, - // 2 if reading content, -1 if error. - - char *getallheaders(); // double null terminated, null delimited list - char *getheader(char *headername); - char *getreply() { return m_reply; } - int getreplycode(); // returns 0 if none yet, otherwise returns http reply code. - - char *geterrorstr() { return m_errstr;} - - char *getredirurl(); - - int bytes_available(); - int get_bytes(char *buf, int len); - int peek_bytes(char *buf, int len); - - int content_length() { char *p=getheader("content-length"); if (p) return atoi(p); return 0; } - - JNL_Connection *get_con() { return m_con; } - - protected: - void reinit(); - void deinit(); - void seterrstr(char *str) { if (m_errstr) free(m_errstr); m_errstr=(char*)malloc(strlen(str)+1); strcpy(m_errstr,str); } - - void do_parse_url(char *url, char **host, int *port, char **req, char **lp); - void do_encode_mimestr(char *in, char *out); - - JNL_AsyncDNS *m_dns; - JNL_Connection *m_con; - int m_recvbufsize; - - int m_http_state; - - int m_http_port; - char *m_http_url; - char *m_http_redir_url; - char *m_http_host; - char *m_http_lpinfo; - char *m_http_request; - - char *m_http_proxylpinfo; - char *m_http_proxyhost; - int m_http_proxyport; - - char *m_sendheaders; - char *m_recvheaders; - int m_recvheaders_size; - char *m_reply; - - char *m_errstr; -}; - -#endif // _HTTPGET_H_ diff --git a/Frameworks/JNetLib/jnetlib/httppost.cpp b/Frameworks/JNetLib/jnetlib/httppost.cpp deleted file mode 100755 index c1ec4eff6..000000000 --- a/Frameworks/JNetLib/jnetlib/httppost.cpp +++ /dev/null @@ -1,412 +0,0 @@ -/* -** JNetLib -** Copyright (C) Joshua Teitelbaum, sergent first class, 1014 army. -** Author: Joshua Teitelbaum -** File: httppost.cpp -** License: see jnetlib.h -*/ - -#ifdef _WIN32 -#include -#include -#endif -#include "netinc.h" -#include "util.h" -#include "httppost.h" - -#include -#include - -static char *PREFIX = "--"; -static char *NEWLINE = "\r\n"; - -/* -** Joshua Teitelbaum 1/15/2006 -** 1014 Army, Sergent First Class -** HTTP Post implementation employing HTTPGet as base class. -*/ -/* -** _endstack -** when building the POST stack for a FORM, need a postamble -*/ -void JNL_HTTPPost::_endstack() -{ - std::string cd; - cd = PREFIX; - cd += m_boundary; - cd += PREFIX; - cd += NEWLINE; - - FILEStackObject fso; - fso.m_otype = 2; - fso.m_str = cd; - m_filestack.push_back(fso); - -} -/* -** prepares one field and puts it on the stack -*/ -void JNL_HTTPPost::_preparefield(std::string &name) -{ - std::string cd; - - cd = PREFIX; - cd += m_boundary; - cd += NEWLINE; - cd += "content-disposition: form-data; name=\""; - cd += name; - cd += "\""; - cd += NEWLINE; - cd += NEWLINE; - cd += m_fields[name]; - cd += "\r\n"; - - FILEStackObject fso; - - fso.m_otype = 3; - fso.m_str = cd; - m_filestack.push_back(fso); - -} -/* -** prepare all the fields, and push them on the stack -*/ -void JNL_HTTPPost::_preparefieldstack() -{ - std::map::iterator it; - - for(it = m_fields.begin(); it != m_fields.end(); it++) - { - std::string str = (*it).first; - _preparefield(str); - } -} -/* -** prepare files and put them on the stack -*/ -void JNL_HTTPPost::_preparefilestack() -{ - std::map::iterator it; - - for(it = m_paths.begin(); it != m_paths.end(); it++) - { - /* - --boundary\r\n - Content-Disposition: form-data; name=""; filename=""\r\n - Content-Type: \r\n - \r\n - \r\n - */ - - std::string cd ; - - cd = PREFIX; - cd += m_boundary; - cd += NEWLINE; - cd += "content-disposition: form-data; name=\""; - cd += (*it).first; - cd += "\"; filename=\""; - cd += m_filenames[(*it).first]; - cd += "\""; - cd += NEWLINE; - cd += "content-type: "; - cd += m_content_type[(*it).first]; - cd += NEWLINE; - cd += NEWLINE; - - - FILEStackObject fso; - - fso.m_otype = 0; - fso.m_str = cd; - m_filestack.push_back(fso); - - fso.m_otype = 1; - fso.m_str = (*it).first; - m_filestack.push_back(fso); - - cd = NEWLINE; - - fso.m_otype = 2; - fso.m_str = cd; - m_filestack.push_back(fso); - } - -} -/* -** payload function, run. -** the tactic is this: -** if we can't write, do normal run. -** -** while there is stuff on the POST stack -** pop and item -** write to the buffers as much as we can -** if we can't write more, stop -** end while -** do normal run -*/ -int JNL_HTTPPost::run() -{ - bool stop = 0; - std::map::iterator it; - int ntowrite; - int retval; - do - { - if(m_con->send_bytes_available() <= 0) - { - /* - ** rut roh, no buffa - */ - break; - } - - if(m_filestack.size() <= 0) - { - /* - ** Nothing to do - */ - break; - } - /* - ** Get the current object off the stack - */ - switch(m_filestack.front().m_otype) - { - case 0: /*preamble*/ - case 2: /*postamble*/ - case 3: /*plain jane field*/ - { - ntowrite = m_filestack.front().m_str.length() - m_filestack.front().nwritten; - - if(m_con->send_bytes_available() < ntowrite) - { - ntowrite = m_con->send_bytes_available(); - } - if(ntowrite>0) - { - retval = m_con->send(m_filestack.front().m_str.c_str() + m_filestack.front().nwritten,ntowrite); - - if(retval < 0) - { - break; - } - - m_filestack.front().nwritten += ntowrite; - m_nwritten += ntowrite; - - if( m_filestack.front().nwritten == m_filestack.front().m_str.length()) - { - /* - ** all done with this object - */ - m_filestack.pop_front(); - } - } - else - { - retval = 0; - stop = true; - } - } - break; - case 1: /*MEAT*/ - { - FILE *fp; - int sresult; - fp = fopen(m_paths[m_filestack.front().m_str].c_str(),"rb"); - - if(fp == NULL) - { - /* - ** someone gave this process a hot foot? - */ - return -1; - } - sresult = fseek(fp,m_filestack.front().nwritten,SEEK_SET); - - if(sresult < 0) - { - /* - ** someone gave this process a hot foot? - */ - fclose(fp); - return -1; - } - - if(((m_content_length[m_filestack.front().m_str] - m_filestack.front().nwritten)) > (unsigned long)m_con->send_bytes_available()) - { - ntowrite = m_con->send_bytes_available(); - } - else - { - ntowrite = (m_content_length[m_filestack.front().m_str] - m_filestack.front().nwritten); - } - - char *b=NULL; - - b = (char *)malloc(ntowrite); - - if(b == NULL) - { - return -1; - /* - ** whiskey tango foxtrot - */ - } - /* - ** read from where we left off - */ - sresult = fread(b,1,ntowrite,fp); - - if(sresult != ntowrite) - { - /* - ** hot foot with matches again - */ - if(b) - { - free(b); - } - fclose(fp); - return -1; - } - - fclose(fp); - - retval = m_con->send(b,ntowrite); - - free(b); - - if(retval < 0) - { - return retval; - } - - m_filestack.front().nwritten += ntowrite; - - m_nwritten += ntowrite; - - if(m_filestack.front().nwritten == m_content_length[m_filestack.front().m_str]) - { - m_filestack.pop_front(); - } - } - break; - } - } while(!stop); - - return JNL_HTTPGet::run(); -} -/* -** addfield, adds field -*/ -int JNL_HTTPPost::addfield(char *name, char *val) -{ - if(name == NULL || val == NULL) - { - return -1; - } - m_fields[name]=val; - - return 0; -} -/* -** addfile, adds file -*/ -int JNL_HTTPPost::addfile(char *name, char *mimetype, char *filename, char *filepath) -{ - struct stat buffer; - - FILE *fp=NULL; - if(name==NULL || filepath == NULL || mimetype == NULL || filename == NULL || (!(fp=fopen(filepath,"rb")))) - { - return -1; - } - - m_content_type[name] = mimetype; - m_paths[name] = filepath; - m_filenames[name] = filename; - - fstat(fileno(fp),&buffer); - fclose(fp); - m_content_length[name] = buffer.st_size; - - return 0; -} -/* -** After adding fields and files, get the content length -*/ -int JNL_HTTPPost::contentlength() -{ - std::map::iterator it; - std::string tmp; - int length = 0; -// fields - { - for (it = m_fields.begin(); it != m_fields.end(); it++) - { - std::string name = (*it).first; - std::string value = (*it).second; - - tmp = "--" + m_boundary + "\r\n" - "content-disposition: form-data; name=\"" + name + "\"\r\n" - "\r\n"; - tmp += value + "\r\n"; - - length += tmp.size(); - } - } - - // files - { - for (it = m_filenames.begin(); it != m_filenames.end(); it++) - { - std::string name = (*it).first; - std::string filename = (*it).second; - long content_length = m_content_length[name]; - std::string content_type = m_content_type[name]; - tmp = "--" + m_boundary + "\r\n" - "content-disposition: form-data; name=\"" + name + "\"; filename=\"" + filename + "\"\r\n" - "content-type: " + content_type + "\r\n" - "\r\n"; - length += tmp.size(); - length += content_length; - length += 2; // crlf after file - } - } - - // end - tmp = "--" + m_boundary + "--\r\n"; - length += tmp.size(); - - return length; - -} -void JNL_HTTPPost::_addformheader() -{ - char *h; -#ifdef _WIN32 - srand(GetTickCount()); -#else - srand(time(NULL)); -#endif - - int x; - char *preamble = "content-type:multipart/form-data; boundary="; - char *dashes = "----"; - - char *post_boundary = (char*)alloca(10+strlen(dashes)); - memcpy(post_boundary,dashes,strlen(dashes)); - - for(x=strlen(dashes); x < (int)strlen(dashes)+9; x++) - { - post_boundary[x] = (char)(rand() % 9) + '0'; - } - post_boundary[x] = 0; - - h = (char *)alloca(strlen(preamble) + strlen(post_boundary) + 1); - sprintf(h,"%s%s",preamble,post_boundary); - addheader(h); - m_boundary = post_boundary; -} diff --git a/Frameworks/JNetLib/jnetlib/httppost.h b/Frameworks/JNetLib/jnetlib/httppost.h deleted file mode 100755 index c7351de28..000000000 --- a/Frameworks/JNetLib/jnetlib/httppost.h +++ /dev/null @@ -1,129 +0,0 @@ - -/* -** JNetLib -** Copyright (C) Joshua Teitelbaum, sergent first class, 1014 army. -** Author: Joshua Teitelbaum -** File: httppost.cpp/h -** License: see jnetlib.h -** Usage: -** 1. Create a JNL_HTTPPost object, optionally specifying a JNL_AsyncDNS -** object to use (or NULL for none, or JNL_CONNECTION_AUTODNS for auto), -** and the receive buffer size, and a string specifying proxy (or NULL -** for none). See note on proxy string below. -** 2. call addheader() to add whatever headers you want. It is recommended to -** add at least the following two: -** addheader("User-Agent:MyApp (Mozilla)"); -*/// addheader("Accept:*/*"); -/* Joshua Teitelbaum 1/15/2006 -** 2.5 call addfield to add field items to your POST -** 2.9 call addfile to add file items to your POST -*/ -/* ( the comment weirdness is there so I Can do the star-slash :) -** 3. Call connect() with the URL you wish to Post (see URL string note below) -** 4. Call run() once in a while, checking to see if it returns -1 -** (if it does return -1, call geterrorstr() to see what the error is). -** (if it returns 1, no big deal, the connection has closed). -** 5. While you're at it, you can call bytes_available() to see if any data -** from the http stream is available, or getheader() to see if any headers -** are available, or getreply() to see the HTTP reply, or getallheaders() -** to get a double null terminated, null delimited list of headers returned. -** 6. If you want to read from the stream, call get_bytes (which returns how much -** was actually read). -** 7. content_length() is a helper function that uses getheader() to check the -** content-length header. -** 8. Delete ye' ol' object when done. -** -** Proxy String: -** should be in the format of host:port, or user@host:port, or -** user:password@host:port. if port is not specified, 80 is assumed. -** URL String: -** should be in the format of http://user:pass@host:port/requestwhatever -** note that user, pass, port, and /requestwhatever are all optional :) -** note that also, http:// is really not important. if you do poo:// -** or even leave out the http:// altogether, it will still work. -*/ - -#ifndef _HTTPPOST_H_ -#define _HTTPPOST_H_ - -#include "connection.h" -#include "httpget.h" -/* -** VC6 SPEW -*/ -#pragma warning(disable:4786) -/* -** END VC6 SPEW -*/ -#include -#include -#include - -class FILEStackObject -{ -public: - int m_otype; /* 0 = PREAMBLE, 1 = DO THE FILE , 2 = POSTAMBLE, 3 = FIELD */ - std::string m_str; - unsigned long nwritten; -public: - FILEStackObject() - { - m_otype = 0; - m_str = ""; - nwritten = 0; - } - -}; -class JNL_HTTPPost : public JNL_HTTPGet -{ - public: - int run(void); - void connect(const char *url, int ver=1, char *requestmethod="POST") - { - m_nwritten = 0; - - _addformheader(); - - _preparefieldstack(); - _preparefilestack(); - - _addcontentlength(); - - _endstack(); - - JNL_HTTPGet::connect(url,ver,requestmethod); - } - - int addfield(char *name, char *val); - int addfile(char *name, char *mimetype, char *filename, char *filepath); - int contentlength(); - unsigned long written(){return m_nwritten;}; - -protected: - - void _preparefield(std::string &str); - void _preparefieldstack(); - void _preparefilestack(); - void _endstack(); - void _addformheader(); - void _addcontentlength() - { - char sz[1024]; - sprintf(sz,"Content-length:%d",contentlength()); - addheader(sz); - } - - unsigned long m_nwritten; - std::string m_boundary; - std::string m_strcurrentfileformname; - - std::map m_fields; - std::map m_content_type; - std::map m_paths; - std::map m_filenames; - std::map m_content_length; - - std::list m_filestack; -}; - -#endif // _HTTPPOST_H_ diff --git a/Frameworks/JNetLib/jnetlib/httpserv.cpp b/Frameworks/JNetLib/jnetlib/httpserv.cpp deleted file mode 100755 index b2ec3eb02..000000000 --- a/Frameworks/JNetLib/jnetlib/httpserv.cpp +++ /dev/null @@ -1,233 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: httpserv.cpp - JNL HTTP GET/POST serving implementation -** License: see jnetlib.h -** -** This class just manages the http reply/sending, not where the data -** comes from, etc. -*/ - -#include "netinc.h" -#include "util.h" - -#include "httpserv.h" - -/* - States for m_state: - -1 error (connection closed, etc) - 0 not read request yet. - 1 reading headers - 2 headers read, have not sent reply - 3 sent reply - 4 closed -*/ - -JNL_HTTPServ::JNL_HTTPServ(JNL_Connection *con) -{ - m_con=con; - m_state=0; - m_reply_headers=0; - m_reply_string=0; - m_recvheaders=0; - m_recv_request=0; - m_recvheaders_size=0; - m_errstr=0; - m_reply_ready=0; -} - -JNL_HTTPServ::~JNL_HTTPServ() -{ - free(m_recv_request); - free(m_recvheaders); - free(m_reply_string); - free(m_reply_headers); - free(m_errstr); - delete m_con; -} - -int JNL_HTTPServ::run() -{ // returns: < 0 on error, 0 on connection close, 1 if reading request, 2 if reply not sent, 3 if reply sent, sending data. - int cnt=0; -run_again: - m_con->run(); - if (m_con->get_state()==JNL_Connection::STATE_ERROR) - { - seterrstr(m_con->get_errstr()); - return -1; - } - if (m_con->get_state()==JNL_Connection::STATE_CLOSED) return 4; - - if (m_state == 0) - { - if (m_con->recv_lines_available()>0) - { - char *buf=(char*)malloc(m_con->recv_bytes_available()-1); - m_con->recv_line(buf,m_con->recv_bytes_available()-1); - free(m_recv_request); - m_recv_request=(char*)malloc(strlen(buf)+2); - strcpy(m_recv_request,buf); - m_recv_request[strlen(m_recv_request)+1]=0; - free(buf); - buf=m_recv_request; - while (*buf) buf++; - while (buf >= m_recv_request && *buf != ' ') buf--; - if (strncmp(buf+1,"HTTP",4) || strncmp(m_recv_request,"GET ",3)) - { - seterrstr("malformed HTTP request"); - m_state=-1; - } - else - { - m_state=1; - cnt=0; - if (buf >= m_recv_request) buf[0]=buf[1]=0; - - buf=strstr(m_recv_request,"?"); - if (buf) - { - *buf++=0; // change &'s into 0s now. - char *t=buf; - int stat=1; - while (*t) - { - if (*t == '&' && !stat) { stat=1; *t=0; } - else stat=0; - t++; - } - } - } - } - else if (!cnt++) goto run_again; - } - if (m_state == 1) - { - if (!cnt++ && m_con->recv_lines_available()<1) goto run_again; - while (m_con->recv_lines_available()>0) - { - char buf[4096]; - buf[0]=0; - m_con->recv_line(buf,4096); - if (!buf[0]) { m_state=2; break; } - if (!m_recvheaders) - { - m_recvheaders_size=strlen(buf)+1; - m_recvheaders=(char*)malloc(m_recvheaders_size+1); - if (m_recvheaders) - { - strcpy(m_recvheaders,buf); - m_recvheaders[m_recvheaders_size]=0; - } - } - else - { - int oldsize=m_recvheaders_size; - m_recvheaders_size+=strlen(buf)+1; - char *n=(char*)malloc(m_recvheaders_size+1); - if (n) - { - memcpy(n,m_recvheaders,oldsize); - strcpy(n+oldsize,buf); - n[m_recvheaders_size]=0; - free(m_recvheaders); - m_recvheaders=n; - } - } - } - } - if (m_state == 2) - { - if (m_reply_ready) - { - // send reply - m_con->send_string((char*)(m_reply_string?m_reply_string:"HTTP/1.1 200 OK")); - m_con->send_string("\r\n"); - if (m_reply_headers) m_con->send_string(m_reply_headers); - m_con->send_string("\r\n"); - m_state=3; - } - } - if (m_state == 3) - { - // nothing. - } - - return m_state; -} - -char *JNL_HTTPServ::get_request_file() -{ - // file portion of http request - if (!m_recv_request) return NULL; - char *t=m_recv_request; - while (*t != ' ' && *t) t++; - if (!*t) return NULL; - while (*t == ' ') t++; - return t; -} - -char *JNL_HTTPServ::get_request_parm(char *parmname) // parameter portion (after ?) -{ - char *t=m_recv_request; - while (*t) t++; - t++; - while (*t) - { - while (*t == '&') t++; - if (!strnicmp(t,parmname,strlen(parmname)) && t[strlen(parmname)] == '=') - { - return t+strlen(parmname)+1; - } - t+=strlen(t)+1; - } - return NULL; -} - -char *JNL_HTTPServ::getheader(char *headername) -{ - char *ret=NULL; - if (strlen(headername)<1||!m_recvheaders) return NULL; - char *buf=(char*)malloc(strlen(headername)+2); - strcpy(buf,headername); - if (buf[strlen(buf)-1]!=':') strcat(buf,":"); - char *p=m_recvheaders; - while (*p) - { - if (!strnicmp(buf,p,strlen(buf))) - { - ret=p+strlen(buf); - while (*ret == ' ') ret++; - break; - } - p+=strlen(p)+1; - } - free(buf); - return ret; -} - -void JNL_HTTPServ::set_reply_string(char *reply_string) // should be HTTP/1.1 OK or the like -{ - free(m_reply_string); - m_reply_string=(char*)malloc(strlen(reply_string)+1); - strcpy(m_reply_string,reply_string); -} - -void JNL_HTTPServ::set_reply_header(char *header) // "Connection: close" for example -{ - if (m_reply_headers) - { - char *tmp=(char*)malloc(strlen(m_reply_headers)+strlen(header)+3); - strcpy(tmp,m_reply_headers); - strcat(tmp,header); - strcat(tmp,"\r\n"); - free(m_reply_headers); - m_reply_headers=tmp; - } - else - { - m_reply_headers=(char*)malloc(strlen(header)+3); - strcpy(m_reply_headers,header); - strcat(m_reply_headers,"\r\n"); - } -} diff --git a/Frameworks/JNetLib/jnetlib/httpserv.h b/Frameworks/JNetLib/jnetlib/httpserv.h deleted file mode 100755 index a509a02cf..000000000 --- a/Frameworks/JNetLib/jnetlib/httpserv.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: httpserv.h - JNL interface for doing HTTP GET/POST serving. -** License: see jnetlib.h -** This class just manages the http reply/sending, not where the data -** comes from, etc. -** for a mini-web server see webserver.h -*/ - -#ifndef _HTTPSERV_H_ -#define _HTTPSERV_H_ - -#include "connection.h" - -class JNL_HTTPServ -{ - public: - JNL_HTTPServ(JNL_Connection *con); - ~JNL_HTTPServ(); - - int run(); // returns: < 0 on error, 0 on request not read yet, 1 if reading headers, 2 if reply not sent, 3 if reply sent, sending data. 4 on connection closed. - - char *geterrorstr() { return m_errstr;} - - // use these when state returned by run() is 2 - char *get_request_file(); // file portion of http request - char *get_request_parm(char *parmname); // parameter portion (after ?) - char *getallheaders() { return m_recvheaders; } // double null terminated, null delimited list - char *getheader(char *headername); - - void set_reply_string(char *reply_string); // should be HTTP/1.1 OK or the like - void set_reply_header(char *header); // i.e. "content-size: 12345" - - void send_reply() { m_reply_ready=1; } // send reply, state will advance to 3. - - ////////// sending data /////////////// - int bytes_inqueue() { if (m_state == 3 || m_state == -1 || m_state ==4) return m_con->send_bytes_in_queue(); else return 0; } - int bytes_cansend() { if (m_state == 3) return m_con->send_bytes_available(); else return 0; } - void write_bytes(char *bytes, int length) { m_con->send(bytes,length); } - - void close(int quick) { m_con->close(quick); m_state=4; } - - JNL_Connection *get_con() { return m_con; } - - protected: - void seterrstr(char *str) { if (m_errstr) free(m_errstr); m_errstr=(char*)malloc(strlen(str)+1); strcpy(m_errstr,str); } - - int m_reply_ready; - int m_state; - - char *m_errstr; - char *m_reply_headers; - char *m_reply_string; - char *m_recvheaders; - int m_recvheaders_size; - char *m_recv_request; // either double-null terminated, or may contain parameters after first null. - JNL_Connection *m_con; -}; - -#endif // _HTTPSERV_H_ diff --git a/Frameworks/JNetLib/jnetlib/ircclient.cpp b/Frameworks/JNetLib/jnetlib/ircclient.cpp deleted file mode 100755 index 06b6efd03..000000000 --- a/Frameworks/JNetLib/jnetlib/ircclient.cpp +++ /dev/null @@ -1,1373 +0,0 @@ -/* -** JNetLib -** Copyright (C) Joshua Teitelbaum, sergent first class, 1014 army. -** Author: Joshua Teitelbaum -** File: ircclient.cpp -** License: see jnetlib.h -*/ -#ifdef _WIN32 -#include -#include -#else -#define Sleep(x) usleep((x)*1000) -#endif -#include -#include -#include -#include "jnetlib.h" -#include "ircclient.h" -#include -#include -#include - -JNL_IRCConnection::~JNL_IRCConnection() -{ - if(m_con) - { - delete m_con; - } - m_con = NULL; - - - std::list::iterator it; - - for(it= m_messagequeue.begin(); it != m_messagequeue.end(); it++) - { - JNL_IRCMessage *pm = (*it); - delete pm; - } - - m_messagequeue.clear(); - -} -JNL_IRCConnection::JNL_IRCConnection() -{ - m_con = NULL; -} - -bool JNL_IRCConnection::send_message(const char *fmt,...) -{ - if(fmt == NULL) - { - return false; - } - va_list argptr; - char str[1024]; - *str = 0; - va_start (argptr, fmt); -#ifdef _WIN32 - _vsnprintf (str, 1023,fmt,argptr); -#else - vsnprintf (str, 1023,fmt,argptr); -#endif - str[1023] = 0; - va_end (argptr); - - if(m_con->send_string(str) < 0) - { - return false; - } - return true; -} - -bool JNL_IRCConnection::connect(char *szHost, unsigned short nPort) -{ - m_con = new JNL_Connection(); - - if(m_con == NULL) - { - return false; - } - m_con->connect(szHost,nPort); - - return true; -} - -bool JNL_IRCConnection::run(void) -{ - - int nlines; - char buf[4096]; - - if (!m_con) return false; // error - - m_con->run(); - - if (m_con->get_state()==JNL_Connection::STATE_ERROR) - { - return false; - } - - if (m_con->get_state()==JNL_Connection::STATE_CLOSED) return false; - - do - { - nlines = m_con->recv_lines_available(); - - if(nlines < 0) - { - return false; - } - - if(nlines == 0) - { - return true; - } - - memset(buf,0,sizeof(buf)); - m_con->recv_line(buf,4095); - buf[4095]=0; - - if(_process_line(buf) != true) - { - m_con->close(1); - return false; - } - - } while(nlines > 0); - - return true; -} - -bool JNL_IRCConnection::_process_line(const char *szline) -{ - if(szline == NULL || szline[0] == 0) - { - return false; - } - - JNL_IRCMessage *pm; - - pm = new JNL_IRCMessage(); - - std::list params; - char *prefix=NULL; - char *command=NULL; - int nparams=0; - int n=0; - int x=0; - int k=0; - int bfound = 0; - - if(szline == NULL || szline[0] == 0) - { - return false; - } - - n = strlen(szline); - - if(szline[0] == ':') - { - /* - ** 0123456789abcdef - ** :prefix command params - */ - for(x=0; x < n; x++) - { - if(szline[x] == ' ') - { - bfound = 1; - break; - } - } - - if(bfound) - { - prefix = (char*)alloca(x+1); - memcpy(prefix,szline,x); - prefix[x]=0; - pm->m_prefix = prefix; - x++; - } - } - while(isalnum(szline[x+k])) - { - k++; - } - - command = (char*)alloca(k+1); - memcpy(command,szline+x,k); - command[k] = 0; - - pm->m_command = command; - - x+= k; - - nparams = _parse_paramlist(szline+x,pm->m_params); - - m_messagequeue.push_back(pm); - - return pm->m_command.length() > 0; -} - -/* -BNF NOTATION - ::= - [':' ] - ::= - | [ '!' ] [ '@' ] - ::= - { } | - ::= - ' ' { ' ' } - ::= - [ ':' | ] - ::= - - ::= - - ::= - CR LF -*/ - -int JNL_IRCConnection::_parse_paramlist(const char *szline,JNL_IRCParams &p) -{ - - if(szline == NULL || szline[0] == 0) - { - return 0; - } - if(szline[0] != ' ') - { - return 0; - } - int len=0; - int x=0; - int nparams = 0; - char *trailing=NULL; - std::string str; - - JNL_IRCParams *pcur; - - pcur = &p; - - len = strlen(szline); - -parampickup: - - x++; - - if(x >= len) - { - return nparams; - } - if(szline[x] == ':') - { - /* - ** 0123456789abcdef - ** :the secret of# - ** x is @ 1, len is 16 - ** we are to copy 14 (- the space and ':' ) - */ - if(len - (x+1) > 0) - { - trailing = (char*)alloca( (len - (x+1) ) + 1); - memcpy(trailing,szline + x + 1,(len - (x+1))); - trailing[(len - (x+1))]=0; - x += (len - (x+1)); - pcur->trailing = trailing; - trailing = NULL; - nparams++; - return nparams; - } - } - else - { - /* - ** We are in - ** ::= - [ ':' | ] - ::= - - ::= - - - */ - - str = ""; - while((x < len) && !(szline[x]==' ' || szline[x] == '\r' || szline[x] == '\n')) - { - str += szline[x]; - x++; - } - pcur->middle = str; - pcur->m_params = new JNL_IRCParams(); - pcur = pcur->m_params; - goto parampickup; - } - - return nparams; -} - -JNL_IRCMessage *JNL_IRCConnection::get_message() -{ - JNL_IRCMessage *pm; - - pm = NULL; - - if(m_messagequeue.size() <= 0) - { - return pm; - } - - pm = m_messagequeue.front(); - - m_messagequeue.pop_front(); - - return pm; - -} -/* -** sendpass -** 0 failure -** 1 success -*/ -bool JNL_IRCClient::sendpass(char *password) -{ - if(password == NULL) - { - return 0; - } - return m_con.send_message("PASS %s\r\n",password); -} -bool JNL_IRCClient::nick(char *sznick) -{ - if(sznick == NULL) - { - return 0; - } - return m_con.send_message("NICK %s\r\n",sznick); -} -bool JNL_IRCClient::oper(char *sznick, char *szpassword) -{ - if(sznick == NULL) - { - return 0; - } - return m_con.send_message("OPER %s %s\r\n",sznick,(szpassword ? szpassword : "")); -} -bool JNL_IRCClient::quit(char *szswansong) -{ - if(szswansong == NULL) - { - szswansong = ""; - } - return m_con.send_message("QUIT %s\r\n",szswansong); -} - -bool JNL_IRCClient::part(char *szchannel) -{ - if(szchannel == NULL || strlen(szchannel) == 0) - { - return 0; - } - return m_con.send_message("PART %s\r\n",szchannel); -} -bool JNL_IRCClient::setmode(char *channel, int isadd, char mode, char *param) -{ - if(channel == NULL || strlen(channel) == 0) - { - return 0; - } - - char *prefix; - - if(isadd) - { - prefix = "+"; - } - else - { - prefix = "-"; - } - - switch(mode) - { - case 'o': - case 'p': - case 's': - case 'i': - case 't': - case 'n': - case 'b': - case 'v': - { - } - break; - - default: - { - /* - ** !?Invalid protocol?! - */ - return 0; - } - break; - } - - if(param && strlen(param)) - { - return m_con.send_message("MODE %s %s%c %s\r\n",channel,prefix,mode,param); - } - else - { - return m_con.send_message("MODE %s %s%c\r\n",channel,prefix,mode); - } -} - - -bool JNL_IRCClient::topic(char *szchannel, char *sztopic) -{ - if(szchannel == NULL || strlen(szchannel) == 0) - { - return 0; - } - - if(sztopic == NULL) - { - return m_con.send_message("TOPIC %s\r\n",szchannel); - } - else - { - return m_con.send_message("TOPIC %s %s\r\n",szchannel,sztopic); - } -} - -bool JNL_IRCClient::names(char *szchannel) -{ - - if(szchannel == NULL) - { - return m_con.send_message("NAMES\r\n"); - } - else - { - return m_con.send_message("NAMES %s\r\n",szchannel); - } -} -bool JNL_IRCClient::list(char *szchannel) -{ - - if(szchannel == NULL) - { - return m_con.send_message("LIST\r\n"); - } - else - { - return m_con.send_message("LIST %s\r\n",szchannel); - } -} - -bool JNL_IRCClient::invite(char *sznick, char *szchannel) -{ - if(sznick == NULL || strlen(sznick) == 0 || szchannel == NULL || strlen(szchannel) == 0) - { - return 0; - } - - return m_con.send_message("INVITE %s %s\r\n",sznick,szchannel); -} -bool JNL_IRCClient::userregistration(char *username, char *hostname, char *servername, char *realname) -{ - if(username == NULL || hostname == NULL || servername == NULL || realname == NULL) - { - return 0; - } - return m_con.send_message("USER %s %s %s :%s\r\n",username,hostname,servername,realname); -} - -bool JNL_IRCClient::join(char *channel, char *key) -{ - if(channel == NULL) - { - return 0; - } - - if(key == NULL || strlen(key) <= 0) - { - return m_con.send_message("JOIN %s\r\n",channel); - } - else - { - return m_con.send_message("JOIN &%s %s\r\n",channel,key); - } -} - -bool JNL_IRCClient::kick(char *szchannel, char *sznick, char *szswansong) -{ - if(szchannel == NULL || strlen(szchannel) == 0 || sznick == NULL || strlen(sznick) == 0) - { - return 0; - } - - if(szswansong == NULL) - { - szswansong = "buhbyepoopyhead"; - } - - return m_con.send_message("KICK %s %s :%s\r\n",szchannel,sznick,szswansong); -} - -bool JNL_IRCClient::version(char *szserver) -{ - if(szserver == NULL) - { - return m_con.send_message("VERSION\r\n"); - } - else - { - return m_con.send_message("VERSION %s\r\n",szserver); - } -} -bool JNL_IRCClient::stats(char query,char *szserver) -{ - if(query == 0) - { - return m_con.send_message("STATS\r\n"); - } - else - { - switch(query) - { - case 'c': - case 'h': - case 'i': - case 'k': - case 'l': - case 'm': - case 'o': - case 'y': - case 'u': - { - } - break; - - default: - { - return 0; - } - } - if(szserver) - { - return m_con.send_message("STATS %c %s\r\n",query,szserver); - } - else - { - return m_con.send_message("STATS %c\r\n",query); - } - } -} -bool JNL_IRCClient::links(char *szremote, char *szmask) -{ - if(szremote == NULL || strlen(szremote) == 0) - { - return m_con.send_message("LINKS\r\n"); - } - else - { - if(szmask == NULL || strlen(szmask) == 0) - { - return m_con.send_message("LINKS %s\r\n",szremote); - } - else - { - return m_con.send_message("LINKS %s %s\r\n",szremote,szmask); - } - } -} - -bool JNL_IRCClient::time(char *szserver) -{ - if(szserver == NULL) - { - return m_con.send_message("TIME\r\n"); - } - else - { - return m_con.send_message("TIME %s\r\n",szserver); - } -} - -bool JNL_IRCClient::admin(char *szserver) -{ - if(szserver == NULL) - { - return m_con.send_message("ADMIN\r\n"); - } - else - { - return m_con.send_message("ADMIN %s\r\n",szserver); - } -} - -bool JNL_IRCClient::info(char *szserver) -{ - if(szserver == NULL) - { - return m_con.send_message("INFO\r\n"); - } - else - { - return m_con.send_message("INFO %s\r\n",szserver); - } -} -bool JNL_IRCClient::privmsg(char *szuser, char *txt, bool baction /*= false */) -{ - if(szuser == NULL || strlen(szuser) == 0 || txt == NULL || strlen(txt) == 0) - { - return 0; - } - - if(!baction) - { - return m_con.send_message("PRIVMSG %s :%s\r\n",szuser,txt); - } - else - { - return m_con.send_message("PRIVMSG %s :%cACTION %s%c\r\n",szuser,1,txt,1); - } -} -bool JNL_IRCClient::notice(char *szuser, char *txt) -{ - if(szuser == NULL || strlen(szuser) == 0 || txt == NULL || strlen(txt) == 0) - { - return 0; - } - return m_con.send_message("NOTICE %s :%s\r\n",szuser,txt); -} - -bool JNL_IRCClient::who(char *szuser, char o) -{ - if(szuser == NULL || strlen(szuser) == 0 ) - { - return 0; - } - - if(o == 0) - { - return m_con.send_message("WHO %s\r\n",szuser); - } - else - { - return m_con.send_message("WHO %s o\r\n",szuser); - } -} - -bool JNL_IRCClient::whois(char *server, char *szuser) -{ - if(szuser == NULL || strlen(szuser) == 0) - { - return 0; - } - - if(server == NULL || strlen(server) == 0) - { - return m_con.send_message("WHOIS %s\r\n",szuser); - } - else - { - return m_con.send_message("WHOIS %s %s\r\n",server,szuser); - } -} - -bool JNL_IRCClient::ping(char *szserver) -{ - if(szserver == NULL || strlen(szserver) == 0) - { - return 0; - } - return m_con.send_message("PING %s\r\n",szserver); -} -bool JNL_IRCClient::pong(char *szserver) -{ - if(szserver == NULL || strlen(szserver) == 0) - { - return 0; - } - - return m_con.send_message("PONG %s\r\n",szserver); -} - -bool JNL_IRCClient::run() -{ - if(m_con.run() == false) - { - return false; - } - - JNL_IRCMessage *pm = NULL; - - while( (pm = m_con.get_message()) != NULL ) - { - process_message(*pm); - - delete pm; - } - - return true; -} -JNL_IRC_RETVAL JNL_IRCClient::process_message(JNL_IRCMessage &m) -{ - JNL_IRC_RETVAL rv; - - rv = JNL_IRC_RETVAL_OK; - - if(m.messagenum() == 0) - { - if(!strcmp("JOIN",m.command())) - { - rv = onJoin(m); - } - else if(!strcmp("PART",m.command())) - { - rv = onPart(m); - } - else if(!strcmp("MODE",m.command())) - { - rv = onMode(m); - } - else if(!strcmp("TOPIC",m.command())) - { - rv = onTopic(m); - } - else if(!strcmp("INVITE",m.command())) - { - rv = onInvite(m); - } - else if(!strcmp("KICK",m.command())) - { - rv = onKick(m); - } - else if(!strcmp("STATS",m.command())) - { - rv = onStats(m); - } - else if(!strcmp("PRIVMSG",m.command())) - { - rv = onPrivMsg(m); - } - else if(!strcmp("NOTICE",m.command())) - { - rv = onNotice(m); - } - else if(!strcmp("PING",m.command())) - { - rv = onPing(m); - } - return rv; - } - switch(m.messagenum()) - { - case ERR_NOSUCHNICK: - { - rv = onErrNoSuckNick(m); - } - break; - case ERR_NOSUCHSERVER: - { - rv = onErrNoSuchServer(m); - } - break; - case ERR_NOSUCHCHANNEL: - { - rv = onErrNoSuchChannel(m); - } - break; - case ERR_CANNOTSENDTOCHAN: - { - rv = onErrCannotSendToChan(m); - } - case ERR_TOOMANYCHANNELS: - { - rv = onErrTooManyChannels(m); - } - case ERR_WASNOSUCHNICK: - { - rv = onErrWasNoSuchNick(m); - } - break; - case ERR_TOOMANYTARGETS: - { - rv = onErrTooManyTargets(m); - } - break; - case ERR_NOORIGIN: - { - rv = onErrNoOrigin(m); - } - break; - case ERR_NORECIPIENT: - { - rv = onErrNoRecipient(m); - } - break; - case ERR_NOTEXTTOSEND: - { - rv = onErrNoTextToSend(m); - } - break; - case ERR_NOTOPLEVEL: - { - rv = onErrNoTopLevel(m); - } - break; - case ERR_WILDTOPLEVEL: - { - rv = onErrWildTopLevel(m); - } - break; - case ERR_UNKNOWNCOMMAND: - { - rv = onErrUnknownCommand(m); - } - break; - case ERR_NOMOTD: - { - rv = onErrNoMOTD(m); - } - break; - case ERR_NOADMININFO: - { - rv = onErrNoAdminInfo(m); - } - break; - case ERR_FILEERROR: - { - rv = onErrFileError(m); - } - break; - case ERR_NONICKNAMEGIVEN: - { - rv = onErrNoNickNameGiven(m); - } - break; - case ERR_ERRONEUSNICKNAME: - { - rv = onErrOneUSNickName(m); - } - case ERR_NICKNAMEINUSE: - { - rv = onErrNickNameInUse(m); - } - break; - case ERR_NICKCOLLISION: - { - rv = onErrNickCollision(m); - } - case ERR_USERNOTINCHANNEL: - { - rv = onErrUserNotInChannel(m); - } - break; - case ERR_NOTONCHANNEL: - { - rv = onErrNotOnChannel(m); - } - break; - case ERR_USERONCHANNEL: - { - rv = onErrUserOnChannel(m); - } - break; - case ERR_NOLOGIN: - { - rv = onErrNoLogin(m); - } - break; - case ERR_SUMMONDISABLED: - { - rv = onErrSummonDisabled(m); - } - break; - case ERR_USERSDISABLED: - { - rv = onErrUserDisabled(m); - } - break; - case ERR_NOTREGISTERED: - { - rv = onErrNotRegistered(m); - } - break; - case ERR_NEEDMOREPARAMS: - { - rv = onErrNeedMoreParams(m); - } - break; - case ERR_ALREADYREGISTRED: - { - rv = onErrAlreadyRegistered(m); - } - break; - case ERR_NOPERMFORHOST: - { - rv = onErrNoPermForHost(m); - } - break; - case ERR_PASSWDMISMATCH: - { - rv = onErrPasswdMismatch(m); - } - break; - case ERR_YOUREBANNEDCREEP: - { - rv = onErrYourBannedCreep(m); - } - break; - case ERR_KEYSET: - { - rv = onErrKeySet(m); - } - break; - case ERR_CHANNELISFULL: - { - rv = onErrChannelIsFull(m); - } - break; - case ERR_UNKNOWNMODE: - { - rv = onErrUnknownMode(m); - } - break; - case ERR_INVITEONLYCHAN: - { - rv = onErrInviteOnlyChan(m); - } - break; - case ERR_BANNEDFROMCHAN: - { - rv = onErrBannedFromChan(m); - } - break; - case ERR_BADCHANNELKEY: - { - rv = onErrBadChannelKey(m); - } - break; - case ERR_NOPRIVILEGES: - { - rv = onErrNoPrivileges(m); - } - break; - case ERR_CHANOPRIVSNEEDED: - { - rv = onErrChanOpPrivsNeeded(m); - } - break; - case ERR_CANTKILLSERVER: - { - rv = onErrCantKillServer(m); - } - break; - case ERR_NOOPERHOST: - { - rv = onErrNoOperHost(m); - } - break; - case ERR_UMODEUNKNOWNFLAG: - { - rv = onErrUModeUnknownFlag(m); - } - break; - case ERR_USERSDONTMATCH: - { - rv = onErrUsersDontMatch(m); - } - break; - /* - ** Replies - */ - case RPL_NONE: - { - rv = onRplNone(m); - } - break; - case RPL_USERHOST: - { - rv = onRplUserHost(m); - } - break; - case RPL_ISON: - { - rv = onRplIsOn(m); - } - break; - case RPL_AWAY: - { - rv = onRplAway(m); - } - break; - case RPL_UNAWAY: - { - rv = onRplUnAway(m); - } - break; - case RPL_NOWAWAY: - { - rv = onRplNoAway(m); - } - break; - case RPL_WHOISUSER: - { - rv = onRplWhoIsUser(m); - } - break; - case RPL_WHOISSERVER: - { - rv = onRplWhoIsServer(m); - } - break; - case RPL_WHOISOPERATOR: - { - rv = onRplWhoIsOperator(m); - } - break; - case RPL_WHOISIDLE: - { - rv = onRplWhoIsIdle(m); - } - break; - case RPL_ENDOFWHOIS: - { - rv = onRplEndOfWhoIs(m); - } - break; - case RPL_WHOISCHANNELS: - { - rv = onRplWhoIsChannels(m); - } - break; - case RPL_WHOWASUSER: - { - rv = onRplWhoWasUser(m); - } - break; - case RPL_ENDOFWHOWAS: - { - rv = onRplEndOfWhoWas(m); - } - break; - case RPL_LISTSTART: - { - rv = onRplListStart(m); - } - break; - case RPL_LIST: - { - rv = onRplList(m); - } - break; - case RPL_LISTEND: - { - rv = onRplListEnd(m); - } - break; - case RPL_CHANNELMODEIS: - { - rv = onRplChannelModeIs(m); - } - break; - case RPL_NOTOPIC: - { - rv = onRplNoTopic(m); - } - break; - case RPL_TOPIC: - { - rv = onRplTopic(m); - } - break; - case RPL_WHOISREALIP: - { - rv = onRplWhoIsRealIP(m); - } - break; - case RPL_INVITING: - { - rv = onRplInviting(m); - } - break; - case RPL_SUMMONING: - { - rv = onRplSummoning(m); - } - break; - case RPL_VERSION: - { - rv = onRplVersion(m); - } - break; - case RPL_WHOREPLY: - { - rv = onRplWhoReply(m); - } - break; - case RPL_ENDOFWHO: - { - rv = onRplEndWho(m); - } - break; - case RPL_NAMREPLY: - { - rv = onRplNameReply(m); - } - break; - case RPL_ENDOFNAMES: - { - rv = onRplEndOfNames(m); - } - break; - case RPL_LINKS: - { - rv = onRplLinks(m); - } - break; - case RPL_ENDOFLINKS: - { - rv = onRplEndOfLinks(m); - } - break; - case RPL_BANLIST: - { - rv = onRplBanList(m); - } - break; - case RPL_ENDOFBANLIST: - { - rv = onRplEndOfBanList(m); - } - break; - case RPL_INFO: - { - rv = onRplInfo(m); - } - break; - case RPL_ENDOFINFO: - { - rv = onRplEnofOfInfo(m); - } - break; - case RPL_MOTDSTART: - { - rv = onRplMOTDStart(m); - } - break; - case RPL_MOTD: - { - rv = onRplMOTD(m); - } - break; - case RPL_ENDOFMOTD: - { - rv = onRplEndOfMOTD(m); - } - break; - case RPL_YOUREOPER: - { - rv = onRplYoureOper(m); - } - break; - case RPL_REHASHING: - { - rv = onRplRehasing(m); - } - break; - case RPL_TIME: - { - rv = onRplTime(m); - } - break; - case RPL_USERSSTART: - { - rv = onRplUserStart(m); - } - break; - case RPL_USERS: - { - rv = onRplUser(m); - } - break; - case RPL_ENDOFUSERS: - { - rv = onRplEndOfUsers(m); - } - break; - case RPL_NOUSERS: - { - rv = onRplNoUsers(m); - } - break; - case RPL_TRACELINK: - { - rv = onRplTraceLink(m); - } - break; - case RPL_TRACECONNECTING: - { - rv = onRplTraceConnecting(m); - } - break; - case RPL_TRACEHANDSHAKE: - { - rv = onRplTraceHandleShake(m); - } - break; - case RPL_TRACEUNKNOWN: - { - rv = onRplTraceUnknown(m); - } - break; - case RPL_TRACEOPERATOR: - { - rv = onRplTraceOperator(m); - } - break; - case RPL_TRACEUSER: - { - rv = onRplTraceUser(m); - } - break; - case RPL_TRACESERVER: - { - rv = onRplTraceServer(m); - } - break; - case RPL_TRACENEWTYPE: - { - rv = onRplTraceNewType(m); - } - break; - case RPL_TRACELOG: - { - rv = onRplTraceLog(m); - } - break; - case RPL_STATSLINKINFO: - { - rv = onRplStatsLinkInfo(m); - } - break; - case RPL_STATSCOMMANDS: - { - rv = onRplStatsCommands(m); - } - break; - case RPL_STATSCLINE: - { - rv = onRplStatsCLine(m); - } - break; - case RPL_STATSNLINE: - { - rv = onRplStatsNLine(m); - } - break; - case RPL_STATSILINE: - { - rv = onRplStatsILine(m); - } - break; - case RPL_STATSKLINE: - { - rv = onRplStatsKLine(m); - } - break; - case RPL_STATSYLINE: - { - rv = onRplStatsYLine(m); - } - break; - case RPL_ENDOFSTATS: - { - rv = onRplEndOfStats(m); - } - break; - case RPL_STATSLLINE: - { - rv = onRplStatsLLine(m); - } - break; - case RPL_STATSUPTIME: - { - rv = onRplStatsUptime(m); - } - break; - case RPL_STATSOLINE: - { - rv = onRplStatsOLine(m); - } - break; - case RPL_STATSHLINE: - { - rv = onRplStatsHLine(m); - } - break; - case RPL_STATSULINE: - { - rv = onRplStatsULine(m); - } - break; - case RPL_UMODEIS: - { - rv = onRplUModeIs(m); - } - break; - case RPL_LUSERCLIENT: - { - rv = onRplLUserClient(m); - } - break; - case RPL_LUSEROP: - { - rv = onRplLUserOp(m); - } - break; - case RPL_LUSERUNKNOWN: - { - rv = onRplLUserUknown(m); - } - break; - case RPL_LUSERCHANNELS: - { - rv = onRplLUserChannels(m); - } - break; - case RPL_LUSERME: - { - rv = onRplLUserMe(m); - } - break; - case RPL_ADMINME: - { - rv = onRplAdminMe(m); - } - break; - case RPL_ADMINLOC1: - { - rv = onRplAdminLoc1(m); - } - break; - case RPL_ADMINLOC2: - { - rv = onRplAdminLoc2(m); - } - break; - case RPL_ADMINEMAIL: - { - rv = onRplAdminEmail(m); - } - break; - case RPL_LUSERLOCAL: - { - rv = onRplLUserLocal(m); - } - break; - case RPL_LUSERGLOBAL: - { - rv = onRplLUserGlobal(m); - } - break; - } - - return rv; -} diff --git a/Frameworks/JNetLib/jnetlib/ircclient.h b/Frameworks/JNetLib/jnetlib/ircclient.h deleted file mode 100755 index ec86addc4..000000000 --- a/Frameworks/JNetLib/jnetlib/ircclient.h +++ /dev/null @@ -1,472 +0,0 @@ -#ifndef _JNL_IRCCLIENT_H_ -#define _JNL_IRCCLIENT_H_ -#ifdef WIN32 -#include -#endif -#include "connection.h" -#include -#include -#include -/* -** ERRORS -*/ -#define ERR_NOSUCHNICK 401 -#define ERR_NOSUCHSERVER 402 -#define ERR_NOSUCHCHANNEL 403 -#define ERR_CANNOTSENDTOCHAN 404 -#define ERR_TOOMANYCHANNELS 405 -#define ERR_WASNOSUCHNICK 406 -#define ERR_TOOMANYTARGETS 407 -#define ERR_NOORIGIN 409 -#define ERR_NORECIPIENT 411 -#define ERR_NOTEXTTOSEND 412 -#define ERR_NOTOPLEVEL 413 -#define ERR_WILDTOPLEVEL 414 -#define ERR_UNKNOWNCOMMAND 421 -#define ERR_NOMOTD 422 -#define ERR_NOADMININFO 423 -#define ERR_FILEERROR 424 -#define ERR_NONICKNAMEGIVEN 431 -#define ERR_ERRONEUSNICKNAME 432 -#define ERR_NICKNAMEINUSE 433 -#define ERR_NICKCOLLISION 436 -#define ERR_USERNOTINCHANNEL 441 -#define ERR_NOTONCHANNEL 442 -#define ERR_USERONCHANNEL 443 -#define ERR_NOLOGIN 444 -#define ERR_SUMMONDISABLED 445 -#define ERR_USERSDISABLED 446 -#define ERR_NOTREGISTERED 451 -#define ERR_NEEDMOREPARAMS 461 -#define ERR_ALREADYREGISTRED 462 -#define ERR_NOPERMFORHOST 463 -#define ERR_PASSWDMISMATCH 464 -#define ERR_YOUREBANNEDCREEP 465 -#define ERR_KEYSET 467 -#define ERR_CHANNELISFULL 471 -#define ERR_UNKNOWNMODE 472 -#define ERR_INVITEONLYCHAN 473 -#define ERR_BANNEDFROMCHAN 474 -#define ERR_BADCHANNELKEY 475 -#define ERR_NOPRIVILEGES 481 -#define ERR_CHANOPRIVSNEEDED 482 -#define ERR_CANTKILLSERVER 483 -#define ERR_NOOPERHOST 491 -#define ERR_UMODEUNKNOWNFLAG 501 -#define ERR_USERSDONTMATCH 502 - -/* -** Replies -*/ -#define RPL_NONE 300 -#define RPL_USERHOST 302 -#define RPL_ISON 303 -#define RPL_AWAY 301 -#define RPL_UNAWAY 305 -#define RPL_NOWAWAY 306 -#define RPL_WHOISUSER 311 -#define RPL_WHOISSERVER 312 -#define RPL_WHOISOPERATOR 313 -#define RPL_WHOISIDLE 317 -#define RPL_ENDOFWHOIS 318 -#define RPL_WHOISCHANNELS 319 -#define RPL_WHOWASUSER 314 -#define RPL_ENDOFWHOWAS 369 -#define RPL_LISTSTART 321 -#define RPL_LIST 322 -#define RPL_LISTEND 323 -#define RPL_CHANNELMODEIS 324 -#define RPL_NOTOPIC 331 -#define RPL_TOPIC 332 -#define RPL_WHOISREALIP 338 -#define RPL_INVITING 341 -#define RPL_SUMMONING 342 -#define RPL_VERSION 351 -#define RPL_WHOREPLY 352 -#define RPL_ENDOFWHO 315 -#define RPL_NAMREPLY 353 -#define RPL_ENDOFNAMES 366 -#define RPL_LINKS 364 -#define RPL_ENDOFLINKS 365 -#define RPL_BANLIST 367 -#define RPL_ENDOFBANLIST 368 -#define RPL_INFO 371 -#define RPL_ENDOFINFO 374 -#define RPL_MOTDSTART 375 -#define RPL_MOTD 372 -#define RPL_ENDOFMOTD 376 -#define RPL_YOUREOPER 381 -#define RPL_REHASHING 382 -#define RPL_TIME 391 -#define RPL_USERSSTART 392 -#define RPL_USERS 393 -#define RPL_ENDOFUSERS 394 -#define RPL_NOUSERS 395 -#define RPL_TRACELINK 200 -#define RPL_TRACECONNECTING 201 -#define RPL_TRACEHANDSHAKE 202 -#define RPL_TRACEUNKNOWN 203 -#define RPL_TRACEOPERATOR 204 -#define RPL_TRACEUSER 205 -#define RPL_TRACESERVER 206 -#define RPL_TRACENEWTYPE 208 -#define RPL_TRACELOG 261 -#define RPL_STATSLINKINFO 211 -#define RPL_STATSCOMMANDS 212 -#define RPL_STATSCLINE 213 -#define RPL_STATSNLINE 214 -#define RPL_STATSILINE 215 -#define RPL_STATSKLINE 216 -#define RPL_STATSYLINE 218 -#define RPL_ENDOFSTATS 219 -#define RPL_STATSLLINE 241 -#define RPL_STATSUPTIME 242 -#define RPL_STATSOLINE 243 -#define RPL_STATSHLINE 244 -#define RPL_STATSULINE 246 -#define RPL_UMODEIS 221 -#define RPL_LUSERCLIENT 251 -#define RPL_LUSEROP 252 -#define RPL_LUSERUNKNOWN 253 -#define RPL_LUSERCHANNELS 254 -#define RPL_LUSERME 255 -#define RPL_ADMINME 256 -#define RPL_ADMINLOC1 257 -#define RPL_ADMINLOC2 258 -#define RPL_ADMINEMAIL 259 -#define RPL_LUSERLOCAL 265 -#define RPL_LUSERGLOBAL 266 - -typedef enum -{ - JNL_IRC_RETVAL_OK = 0, - JNL_IRC_RETVAL_FAIL -}JNL_IRC_RETVAL; - -class JNL_IRCParams -{ -public: - std::string middle; - std::string trailing; - JNL_IRCParams *m_params; - - JNL_IRCParams::JNL_IRCParams() - { - m_params = NULL; - } - - ~JNL_IRCParams() - { - if(m_params) - { - /* - ** delete children first. - */ - delete m_params; - m_params = NULL; - } - } -}; - -class JNL_IRCMessage -{ -public: - JNL_IRCMessage() - { - } - ~JNL_IRCMessage() - { - } -public: - std::string m_prefix; - std::string m_command; - JNL_IRCParams m_params; - - const char *command() - { - return m_command.c_str(); - } - int messagenum() - { - if(isdigit(m_command[0])) - { - return atoi(m_command.c_str()); - } - return 0; - } -}; - -/* -** JNL_IRCConnection: -** sends and receives IRC messages -** When run is called, it stores IRC messages in its queue. -** After run, you may then call get_message() until there are none (null). -** -** The JNL_IRCClient exemplifies this in its version -** of run. -*/ -class JNL_IRCConnection -{ -protected: - JNL_Connection *m_con; - std::list m_messagequeue; -public: - JNL_IRCConnection(); - virtual ~JNL_IRCConnection(); - bool connect(char *szHost, unsigned short nPort=6667); - void close() - { - m_con->close(1); - } - bool send_message(const char *fmt,...); - bool run(void); - JNL_IRCMessage *get_message(); -protected: - bool _process_line(const char *szline); - int _parse_paramlist(const char *szline,JNL_IRCParams &p); -}; - -/* -** JNL_IRCClient -** Very basic, and woefully incomplete client -** Here's what it can do, and what you probably should use from this: -** Use the 'sending' block of commands -** They are, sendpass, nick, oper, quit....etc. -** -** Next, there are quite a few virtual methods at your disposal to override. -** They will be called if this, the base class, JNL_IRCClient's process_message is called. -** If you want to short circuit those events, then override process_message and do your own -** event dispatching. -** -** Else, just let JNL_IRCClient's process_message run, and you override the on*** methods. -*/ -class JNL_IRCClient -{ -protected: - JNL_IRCConnection m_con; -public: - JNL_IRCClient() - { - } - virtual ~JNL_IRCClient() - { - m_con.close(); - } - - void close() - { - m_con.close(); - } - - bool connect(char *szHost, unsigned short nPort=6667) - { - return m_con.connect(szHost,nPort); - } - bool run(void); - - virtual JNL_IRC_RETVAL process_message(JNL_IRCMessage &m); - - bool sendpass(char *password); - bool nick(char *nick); - bool oper(char *user, char *password); - bool quit(char *swansong); - bool part(char *swansong); - bool join(char *channel, char *key=NULL); - bool setmode(char *channel, int isadd, char mode, char *param=NULL); - bool topic(char *channel, char *topic=NULL); - bool userregistration(char *username="poopoo", char *hostname="hostname", char *servername="servername", char *realname="poopoo platter"); - bool opuser(char *channel, char *nick) - { - return setmode(channel,1,'o',nick); - } - bool deopuser(char *channel, char *nick) - { - return setmode(channel,0,'o',nick); - } - bool voiceuser(char *channel, char *nick) - { - return setmode(channel,1,'v',nick); - } - bool devoiceuser(char *channel, char *nick) - { - return setmode(channel,0,'v',nick); - } - bool banuser(char *channel, char *banstring) - { - return setmode(channel,1,'b',banstring); - } - bool unbanuser(char *channel, char *banstring) - { - return setmode(channel,0,'b',banstring); - } - bool names(char *channel=NULL); - bool list(char *channel=NULL); - bool invite(char *nick, char *channel); - bool kick(char *channel, char *user, char *swansong=NULL); - bool version(char *server=NULL); - bool stats(char query = 0, char *server=NULL); - bool links(char *remote=NULL, char *mask=NULL); - bool time(char *server=NULL); - /* - ** Missing trace and connect - */ - bool admin(char *server=NULL); - bool info(char *server=NULL); - bool privmsg(char *recipient, char *msg, bool baction=false); - bool notice(char *recipient, char *msg); - bool who(char *nick, char o=0); - bool whois(char *server,char *nick); - bool ping(char *server); - bool pong(char *server); - - /* - ** Missing whowas and kill, and error - */ -protected: - - virtual JNL_IRC_RETVAL onErrNoSuckNick(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoSuchServer(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoSuchChannel(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrCannotSendToChan(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrTooManyChannels(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrWasNoSuchNick(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrTooManyTargets(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoOrigin(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoRecipient(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoTextToSend(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoTopLevel(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrWildTopLevel(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrUnknownCommand(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoMOTD(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoAdminInfo(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrFileError(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoNickNameGiven(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrOneUSNickName(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNickNameInUse(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNickCollision(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNotOnChannel(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrUserNotInChannel(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrUserOnChannel(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoLogin(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrSummonDisabled(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrUserDisabled(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNotRegistered(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNeedMoreParams(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrAlreadyRegistered(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoPermForHost(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrPasswdMismatch(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrYourBannedCreep(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrKeySet(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrChannelIsFull(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrUnknownMode(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrInviteOnlyChan(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrBannedFromChan(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrBadChannelKey(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoPrivileges(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrChanOpPrivsNeeded(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrCantKillServer(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrNoOperHost(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrUModeUnknownFlag(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onErrUsersDontMatch(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - /* - ** REPLY BLOCK - */ - virtual JNL_IRC_RETVAL onRplNone(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplUserHost(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplIsOn(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplAway(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplNoAway(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplUnAway(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoIsUser(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoIsServer(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoIsIdle(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoIsOperator(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfWhoIs(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoIsChannels(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoWasUser(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfWhoWas(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplListStart(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplList(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplListEnd(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplChannelModeIs(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplNoTopic(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTopic(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoIsRealIP(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplInviting(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplSummoning(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplVersion(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplWhoReply(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndWho(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplNameReply(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfNames(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLinks(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfLinks(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplBanList(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfBanList(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplInfo(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEnofOfInfo(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplMOTDStart(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplMOTD(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfMOTD(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplYoureOper(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplRehasing(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTime(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplUserStart(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplUser(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfUsers(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplNoUsers(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceLink(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceConnecting(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceHandleShake(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceUnknown(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceOperator(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceUser(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceServer(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceNewType(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplTraceLog(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsLinkInfo(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsCommands(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsCLine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsNLine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsILine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsKLine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsYLine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplEndOfStats(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsLLine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsUptime(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsOLine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsHLine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplStatsULine(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplUModeIs(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLUserClient(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLUserOp(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLUserUknown(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLUserChannels(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLUserMe(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplAdminMe(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplAdminLoc1(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplAdminLoc2(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplAdminEmail(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLUserLocal(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onRplLUserGlobal(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - - /* - ** Messages from server - */ - virtual JNL_IRC_RETVAL onJoin(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onPart(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onMode(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onTopic(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onInvite(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onKick(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onStats(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onPrivMsg(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - virtual JNL_IRC_RETVAL onNotice(JNL_IRCMessage &m){m.messagenum();return JNL_IRC_RETVAL_OK;}; - /* - ** Don't override this one (onPing), or if you do...make sure you call the base class. - */ - virtual JNL_IRC_RETVAL onPing(JNL_IRCMessage &m){pong((char*)m.m_params.trailing.c_str());return JNL_IRC_RETVAL_OK;}; - - -}; -#endif diff --git a/Frameworks/JNetLib/jnetlib/jnetlib.h b/Frameworks/JNetLib/jnetlib/jnetlib.h deleted file mode 100755 index 0f8a9c6b7..000000000 --- a/Frameworks/JNetLib/jnetlib/jnetlib.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2003 Nullsoft, Inc. -** Author: Justin Frankel -** File: jnetlib.h - JNL main include file (not really necessary). -** -** For documentation, look at the following files: -** Generic network initialization: netinc.h -** DNS: asyncdns.h -** TCP connections: connection.h -** HTTP GET connections: httpget.h -** TCP listen: listen.h -** -** license: -** -** This software is provided 'as-is', without any express or implied -** warranty. In no event will the authors be held liable for any damages -** arising from the use of this software. -** -** Permission is granted to anyone to use this software for any purpose, -** including commercial applications, and to alter it and redistribute it -** freely, subject to the following restrictions: -** -** 1. The origin of this software must not be misrepresented; you must not -** claim that you wrote the original software. If you use this software -** in a product, an acknowledgment in the product documentation would be -** appreciated but is not required. -** 2. Altered source versions must be plainly marked as such, and must not be -** misrepresented as being the original software. -** 3. This notice may not be removed or altered from any source distribution. -** -*/ - - -#ifndef _JNETLIB_H_ -#define _JNETLIB_H_ - -#include "netinc.h" -#include "util.h" - -#include "asyncdns.h" -#include "connection.h" -#include "sslconnection.h" -#include "httpget.h" -#include "httppost.h" -#include "httpserv.h" -#include "listen.h" -#include "ssllisten.h" - -#endif//_JNETLIB_H_ diff --git a/Frameworks/JNetLib/jnetlib/listen.cpp b/Frameworks/JNetLib/jnetlib/listen.cpp deleted file mode 100755 index 8f691973a..000000000 --- a/Frameworks/JNetLib/jnetlib/listen.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: listen.cpp - JNL TCP listen implementation -** License: see jnetlib.h -*/ - -#include "netinc.h" -#include "util.h" -#include "listen.h" - -JNL_Listen::JNL_Listen(short port, unsigned long which_interface) -{ - m_port=port; - m_socket = ::socket(AF_INET,SOCK_STREAM,0); - if (m_socket < 0) - { - } - else - { - struct sockaddr_in sin; - SET_SOCK_BLOCK(m_socket,0); -#ifndef _WIN32 - int bflag = 1; - setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &bflag, sizeof(bflag)); -#endif - memset((char *) &sin, 0,sizeof(sin)); - sin.sin_family = AF_INET; - sin.sin_port = htons( (short) port ); - sin.sin_addr.s_addr = which_interface?which_interface:INADDR_ANY; - if (::bind(m_socket,(struct sockaddr *)&sin,sizeof(sin))) - { - closesocket(m_socket); - m_socket=-1; - } - else - { - if (::listen(m_socket,8)==-1) - { - closesocket(m_socket); - m_socket=-1; - } - } - } -} - -JNL_Listen::~JNL_Listen() -{ - if (m_socket>=0) - { - closesocket(m_socket); - } -} - -JNL_Connection *JNL_Listen::get_connect(int sendbufsize, int recvbufsize) -{ - if (m_socket < 0) - { - return NULL; - } - struct sockaddr_in saddr; - socklen_t length = sizeof(struct sockaddr_in); - int s = accept(m_socket, (struct sockaddr *) &saddr, &length); - if (s != -1) - { - JNL_Connection *c=new JNL_Connection(NULL,sendbufsize, recvbufsize); - c->connect(s,&saddr); - return c; - } - return NULL; -} diff --git a/Frameworks/JNetLib/jnetlib/listen.h b/Frameworks/JNetLib/jnetlib/listen.h deleted file mode 100755 index 7cdd0063d..000000000 --- a/Frameworks/JNetLib/jnetlib/listen.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: listen.h - JNL interface for opening a TCP listen -** License: see jnetlib.h -** -** Usage: -** 1. create a JNL_Listen object with the port and (optionally) the interface -** to listen on. -** 2. call get_connect() to get any new connections (optionally specifying what -** buffer sizes the connection should be created with) -** 3. check is_error() to see if an error has occured -** 4. call port() if you forget what port the listener is on. -** -*/ - -#ifndef _LISTEN_H_ -#define _LISTEN_H_ -#include "connection.h" - -class JNL_Listen -{ - public: - JNL_Listen(short port, unsigned long which_interface=0); - /* - ** Joshua Teitelbaum 1/28/2006 - */ - virtual ~JNL_Listen(); - virtual JNL_Connection *get_connect(int sendbufsize=8192, int recvbufsize=8192); - short port(void) { return m_port; } - int is_error(void) { return (m_socket<0); } - - protected: - int m_socket; - short m_port; -}; - -#endif //_LISTEN_H_ diff --git a/Frameworks/JNetLib/jnetlib/netinc.h b/Frameworks/JNetLib/jnetlib/netinc.h deleted file mode 100755 index 3e51623a5..000000000 --- a/Frameworks/JNetLib/jnetlib/netinc.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: netinc.h - network includes and portability defines (used internally) -** License: see jnetlib.h -*/ - -/* -** Undefine this if you don't want SSL compiled in -*/ -//#define _JNETLIB_SSL_ 1 - -#ifndef _NETINC_H_ -#define _NETINC_H_ - -#ifdef _WIN32 - -#include -#include -#include -#define strcasecmp(x,y) stricmp(x,y) -#define ERRNO (WSAGetLastError()) -#define SET_SOCK_BLOCK(s,block) { unsigned long __i=block?0:1; ioctlsocket(s,FIONBIO,&__i); } -#define EWOULDBLOCK WSAEWOULDBLOCK -#define EINPROGRESS WSAEWOULDBLOCK -typedef int socklen_t; - -#else - -#ifndef THREAD_SAFE -#define THREAD_SAFE -#endif -#ifndef _REENTRANT -#define _REENTRANT -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define ERRNO errno -#define closesocket(s) close(s) -#define SET_SOCK_BLOCK(s,block) { int __flags; if ((__flags = fcntl(s, F_GETFL, 0)) != -1) { if (!block) __flags |= O_NONBLOCK; else __flags &= ~O_NONBLOCK; fcntl(s, F_SETFL, __flags); } } - -#define stricmp(x,y) strcasecmp(x,y) -#define strnicmp(x,y,z) strncasecmp(x,y,z) -#define wsprintf sprintf - -#ifdef MACOSX -typedef int socklen_t; -#endif - -#endif // !_WIN32 - -#ifndef INADDR_NONE -#define INADDR_NONE 0xffffffff -#endif - -#ifndef INADDR_ANY -#define INADDR_ANY 0 -#endif - -#ifndef SHUT_RDWR -#define SHUT_RDWR 2 -#endif - -#endif //_NETINC_H_ diff --git a/Frameworks/JNetLib/jnetlib/sslconnection.cpp b/Frameworks/JNetLib/jnetlib/sslconnection.cpp deleted file mode 100755 index 57cf4e996..000000000 --- a/Frameworks/JNetLib/jnetlib/sslconnection.cpp +++ /dev/null @@ -1,324 +0,0 @@ -#include "netinc.h" -#include "util.h" -#include "connection.h" -#include "sslconnection.h" - -#ifdef _JNETLIB_SSL_ -SSL_CTX *sslContext = 0; - -#ifdef _DEBUG - -extern "C" void apps_ssl_info_callback (const SSL * s, int where, int ret) -{ - /* - ** DEBUG INFO HERE - */ -} -#endif - -/* -** Well, you should probably change this based on like... -** well, you're level of trust heh -** For now, this basically trusts all certs :) -** -*/ -extern "C" int verify_callback(int ok, X509_STORE_CTX * ctx) -{ - /* For certificate verification */ - int verify_depth = 0; - int verify_error = X509_V_OK; - - - char buf[1024]; - X509 * err_cert = X509_STORE_CTX_get_current_cert(ctx); - int err = X509_STORE_CTX_get_error(ctx); - int depth = X509_STORE_CTX_get_error_depth(ctx); - X509_NAME_oneline(X509_get_subject_name(err_cert), buf, sizeof(buf)); - - if (!ok) - { - - if (verify_depth >= depth) - { - ok = 1; - verify_error = X509_V_OK; - } - else - { - ok = 0; - verify_error = X509_V_ERR_CERT_CHAIN_TOO_LONG; - } - } - switch (ctx->error) - { - - case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: - X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert), buf, sizeof(buf)); - break; - - case X509_V_ERR_CERT_NOT_YET_VALID: - case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: - break; - - case X509_V_ERR_CERT_HAS_EXPIRED: - case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: - break; - } - return ok; -} - -JNL_SSL_Connection::JNL_SSL_Connection(SSL* pssl, JNL_AsyncDNS *dns, int sendbufsize, int recvbufsize) : JNL_Connection(dns, sendbufsize, recvbufsize), - forceConnect(false) -{ - m_ssl = pssl; - m_bsslinit = false; - - if (m_ssl) - { - m_bcontextowned = false; - } - else - { - m_bcontextowned = true; - } - - if (m_bcontextowned == false) - { - return ; - } - - m_bsslinit = true; - - /* See the SSL states in our own callback */ -#ifdef _DEBUG - // SSL_CTX_set_info_callback(m_app_ctx, apps_ssl_info_callback); -#endif - - /* Set the certificate verification callback */ - //SSL_CTX_set_verify(sslContext, SSL_VERIFY_PEER, verify_callback); - - /* Not sure what this does */ - //SSL_CTX_set_session_cache_mode(sslContext, SSL_SESS_CACHE_CLIENT); - - if(sslContext == NULL) - { - SSL_METHOD * meth = NULL; - SSLeay_add_ssl_algorithms(); - SSL_load_error_strings(); - meth = SSLv23_client_method(); - - if ((sslContext = SSL_CTX_new(meth)) == NULL) - { - return; - } - - } - - return ; -} - -int JNL_SSL_Connection::socket_connect() -{ - int retval; - - if (m_bcontextowned == false) - { - /* - ** WTF? - */ - return -1; - } - if (m_ssl != NULL) - { - return -1; - } - - retval = JNL_Connection::socket_connect(); - - if (retval != 0) - { - if (ERRNO != EINPROGRESS) - { - return retval; // benski> if the underlying socket hasn't connected yet, then we can't start the SSL connection - /* - ** Joshua Teitelbaum 3/2/2006 - ** Fatal error here - */ - } - } - - m_ssl = SSL_new(sslContext); - - if (m_ssl == NULL) - { - return -1; - } - - /* Tell that we are in connect mode */ - SSL_set_connect_state(m_ssl); - - /* Set socket descriptor with the socket we already have open */ - if(SSL_set_fd(m_ssl, m_socket) != 0) - { - return -1; - } - - return retval; -} -void JNL_SSL_Connection::socket_shutdown() -{ - if (m_ssl) - SSL_shutdown(m_ssl); - JNL_Connection::socket_shutdown(); - - if (m_ssl) - { - SSL_free(m_ssl); - m_ssl = NULL; - } - return ; -} - -void JNL_SSL_Connection::run(int max_send_bytes, int max_recv_bytes, int *bytes_sent, int *bytes_rcvd) -{ - - if (!m_bsslinit) - { - int rval = 0; - int e = 0; - - rval = SSL_accept(m_ssl); - - if (rval == -1) - { - e = SSL_get_error(m_ssl, rval); - - if (!((e == SSL_ERROR_WANT_READ) || (e == SSL_ERROR_WANT_WRITE))) - { - m_state = STATE_ERROR; - } - - return ; - } - else - { - m_bsslinit = true; - } - } - - /** - ** benski - march 2, 2006 - **if the underlying socket didn't connected yet, we need to try the SSL connection again - */ - if (forceConnect) - { - if(init_ssl_connection() == false) - { - return; - } - } - JNL_Connection::run(max_send_bytes, max_recv_bytes, bytes_sent, bytes_rcvd); -} - -/* -** init_ssl_connection: -** Returns true, meaning can continue -** Else, cannot continue with underlying run -** side effects: -** sets forceConnect -*/ -bool JNL_SSL_Connection::init_ssl_connection() -{ - if(m_ssl == NULL) - { - /* - ** WTF? - ** cascade up. - */ - return true; - } - - int retval = SSL_connect(m_ssl); - - if (retval < 0) - { - int err = SSL_get_error(m_ssl, retval); - - switch (err) - { - case SSL_ERROR_WANT_READ: - case SSL_ERROR_WANT_WRITE: - case SSL_ERROR_WANT_CONNECT: - forceConnect = true; - break; - // fall through - default: // TODO: benski> MOST other errors are OK, (especially "want read" and "want write", but we need to think through all the scenarios here - forceConnect=false; - } - } - else if(retval) - { - /* - ** success - */ - forceConnect = false; - } - - /* - ** If retval == 0 - ** socket is closed, or serious error occurred. - ** cascade up. - */ - - return forceConnect==false; -} -void JNL_SSL_Connection::on_socket_connected(void) -{ - init_ssl_connection(); -} -void JNL_SSL_Connection::connect(int s, struct sockaddr_in *loc) -{ - /* - ** Joshua Teitelbaum 2/01/2006 - ** No need to close - ** This is the reason for divergence as well as setting - ** the connect state - */ - - m_socket = s; - m_remote_port = 0; - m_dns = NULL; - if (loc) *m_saddr = *loc; - else memset(m_saddr, 0, sizeof(m_saddr)); - if (m_socket != -1) - { - SET_SOCK_BLOCK(m_socket, 0); - m_state = STATE_CONNECTED; - SSL_set_fd(m_ssl, m_socket); - } - else - { - m_errorstr = "invalid socket passed to connect"; - m_state = STATE_ERROR; - } -} - -int JNL_SSL_Connection::socket_recv(char *buf, int len, int options) -{ - return SSL_read(m_ssl, buf, len); -} - -int JNL_SSL_Connection::socket_send(char *buf, int len, int options) -{ - return SSL_write(m_ssl, buf, len); -} - -JNL_SSL_Connection::~JNL_SSL_Connection() -{ - if (m_ssl) - { - SSL_free(m_ssl); - m_ssl = NULL; - } -} -#endif diff --git a/Frameworks/JNetLib/jnetlib/sslconnection.h b/Frameworks/JNetLib/jnetlib/sslconnection.h deleted file mode 100755 index 9cff46818..000000000 --- a/Frameworks/JNetLib/jnetlib/sslconnection.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2006 CockOS, Inc. -** Author: Justin Frankel, Joshua Teitelbaum -** File: sslconnection.h - JNL SSL TCP connection interface -** License: see jnetlib.h -*/ -#ifdef _JNETLIB_SSL_ - -#ifndef _JNETLIB_SSL_H_ -#define _JNETLIB_SSL_H_ -/* -** AUTOLINK WITH THESE GUYS NOT IN PROJECT HEH HEH :) -** Build and go, for you :) -*/ - -#pragma comment(lib,"libeay32.lib") -#pragma comment(lib,"ssleay32.lib") -#pragma comment(lib,"ADVAPI32.LIB") -#pragma comment(lib,"USER32.LIB") - -#include -#include "connection.h" - - -class JNL_SSL_Connection : public JNL_Connection -{ -protected: - SSL *m_ssl; - bool m_bcontextowned; - bool m_bsslinit; -public: - JNL_SSL_Connection(SSL* pssl = NULL,JNL_AsyncDNS *dns=JNL_CONNECTION_AUTODNS, int sendbufsize=8192, int recvbufsize=8192); - - //JNL_SSL_Connection(SSL* pssl = NULL,api_dns *dns=API_DNS_AUTODNS, int sendbufsize=8192, int recvbufsize=8192); - virtual ~JNL_SSL_Connection(); - virtual void connect(int sock, struct sockaddr_in *loc=NULL); // used by the listen object, usually not needed by users. - virtual void run(int max_send_bytes=-1, int max_recv_bytes=-1, int *bytes_sent=NULL, int *bytes_rcvd=NULL); - - /* - ** Joshua Teitelbaum 1/27/2006 Adding new BSD socket analogues for SSL compatibility - */ -protected: - virtual void socket_shutdown(); - virtual int socket_recv(char *buf, int len, int options); - virtual int socket_send(char *buf, int len, int options); - virtual int socket_connect(); - virtual void on_socket_connected(); - /* - ** init_ssl_connection: - ** returns true if can continue onwards (could be error, in which case - ** we want the error to cascade through). - ** Else, false if connection was not made, and we have to call this - ** again. - */ - bool init_ssl_connection(); - - bool forceConnect; -}; - - extern SSL_CTX *sslContext; -#endif -#endif diff --git a/Frameworks/JNetLib/jnetlib/ssllisten.cpp b/Frameworks/JNetLib/jnetlib/ssllisten.cpp deleted file mode 100755 index 45a20a291..000000000 --- a/Frameworks/JNetLib/jnetlib/ssllisten.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2006 CockOS, Inc. -** Author: Justin Frankel, Joshua Teitelbaum -** File: ssllisten.cpp - JNL SSL TCP listen implementation -** License: see jnetlib.h -*/ - -#include "netinc.h" -#include "util.h" -#include "ssllisten.h" - -#ifdef _JNETLIB_SSL_ - - -JNL_SSL_Listen::JNL_SSL_Listen(short port, unsigned long which_interface, const char *certpath, const char *privatekeypath) : -JNL_Listen(port,which_interface) ,m_app_ctx(NULL) -{ - SSL_METHOD *p_ssl_method; - m_lasterror[0] = 0; - unsigned long e; - - if(m_socket <= 0 || (certpath==NULL) || (privatekeypath==NULL)) - { - return ; - } - - SSL_load_error_strings(); - SSLeay_add_ssl_algorithms(); - - p_ssl_method = SSLv23_server_method(); - m_app_ctx = SSL_CTX_new (p_ssl_method); - - if (!m_app_ctx) - { - e = ERR_get_error(); - ERR_error_string_n(e, m_lasterror, sizeof(m_lasterror) - 1); - - if (m_socket>=0) - { - closesocket(m_socket); - m_socket = -1; - } - return; - } - - if (SSL_CTX_use_certificate_file(m_app_ctx, certpath, SSL_FILETYPE_PEM) <= 0) - { - e = ERR_get_error(); - ERR_error_string_n(e, m_lasterror, sizeof(m_lasterror) - 1); - if (m_socket>=0) - { - closesocket(m_socket); - m_socket = -1; - } - return; - } - - if (SSL_CTX_use_RSAPrivateKey_file(m_app_ctx, privatekeypath, SSL_FILETYPE_PEM) <= 0) - { - e = ERR_get_error(); - ERR_error_string_n(e, m_lasterror, sizeof(m_lasterror) - 1); - if (m_socket>=0) - { - closesocket(m_socket); - m_socket = -1; - } - return; - } - - if (!SSL_CTX_check_private_key(m_app_ctx)) - { - e = ERR_get_error(); - ERR_error_string_n(e, m_lasterror, sizeof(m_lasterror) - 1); - if (m_socket>=0) - { - closesocket(m_socket); - m_socket = -1; - } - return; - } - - return; -} - -JNL_SSL_Listen::~JNL_SSL_Listen() -{ - -} - -JNL_Connection *JNL_SSL_Listen::get_connect(int sendbufsize, int recvbufsize) -{ - if(m_app_ctx == NULL) - { - return NULL; - } - - if (m_socket < 0) - { - return NULL; - } - struct sockaddr_in saddr; - socklen_t length = sizeof(struct sockaddr_in); - int s = accept(m_socket, (struct sockaddr *) &saddr, &length); - - if(s == -1) - { - return NULL; - } - SSL* p_ssl = SSL_new(m_app_ctx); - - if( p_ssl == NULL || m_socket < 0) - { - sprintf(m_lasterror,"Could not create SSL Context"); - - (m_socket>=0) ? closesocket(m_socket) : 0; - m_socket = -1; - - if(p_ssl != NULL) - SSL_free(p_ssl); - - return NULL; - } - - else - { - JNL_Connection *c=new JNL_SSL_Connection(p_ssl,NULL,sendbufsize, recvbufsize); - c->connect(s,&saddr); - return c; - } - - return NULL; -} - -#endif diff --git a/Frameworks/JNetLib/jnetlib/ssllisten.h b/Frameworks/JNetLib/jnetlib/ssllisten.h deleted file mode 100755 index 8fac73f01..000000000 --- a/Frameworks/JNetLib/jnetlib/ssllisten.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel, Joshua Teitelbaum -** File: ssllisten.h - JNL interface for opening a SSL TCP listen -** License: see jnetlib.h -** -** Usage: -** 1. create a JNL_Listen object with the port and (optionally) the interface -** to listen on. -** 2. call get_connect() to get any new connections (optionally specifying what -** buffer sizes the connection should be created with) -** 3. check is_error() to see if an error has occured -** 4. call port() if you forget what port the listener is on. -** -*/ - -#include "netinc.h" -#include "listen.h" -#ifdef _JNETLIB_SSL_ - -#ifndef _SSL_LISTEN_H_ -#define _SSL_LISTEN_H_ -#include "sslconnection.h" - -#include -#include -#include -#include -#include -#include -#include - -class JNL_SSL_Listen : public JNL_Listen -{ -protected: - SSL_CTX *m_app_ctx; - char m_lasterror[1024]; - - public: - JNL_SSL_Listen(short port, unsigned long which_interface=0,const char *certpath=NULL, const char *privatekeypath=NULL); - virtual ~JNL_SSL_Listen(); - - virtual JNL_Connection *get_connect(int sendbufsize=8192, int recvbufsize=8192); - -}; - -#endif //_SSL_LISTEN_H_ -#endif //_JNETLIB_SSL_ - diff --git a/Frameworks/JNetLib/jnetlib/test.cpp b/Frameworks/JNetLib/jnetlib/test.cpp deleted file mode 100755 index 9e2746c8c..000000000 --- a/Frameworks/JNetLib/jnetlib/test.cpp +++ /dev/null @@ -1,931 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: test.cpp - JNL test code -** License: see jnetlib.h -*/ - -#ifdef _WIN32 -#include -#else -#define Sleep(x) usleep((x)*1000) -#endif -#include -#include "jnetlib.h" -#include "ircclient.h" - -#include -#include -#include - -#define TEST_ASYNCDNS 0 -#define TEST_CONNECTION 0 -#define TEST_LISTEN 0 -#define TEST_TELNET_GATEWAY 0 -#define TEST_HTTPGET 0 -#define TEST_WEBSERVER 0 -#define TEST_IRCCLIENT 0 -#define TEST_HTTPSGET 0 -#define TEST_SSLLISTEN 0 -#define TEST_HTTPPOST 1 - - - -#define TEST_UDP 0 //udp is not done yet tho :) - - - -#if (TEST_WEBSERVER) -#include "webserver.h" - - -class MemPageGenerator : public IPageGenerator -{ - public: - virtual ~MemPageGenerator() { free(m_buf); } - MemPageGenerator(char *buf, int buf_len=-1) { m_buf=buf; if (buf_len >= 0) m_buf_size=buf_len; else m_buf_size=strlen(buf); m_buf_pos=0; } - virtual int GetData(char *buf, int size) // return 0 when done - { - int a=m_buf_size-m_buf_pos; - if (a < size) size=a; - memcpy(buf,m_buf+m_buf_pos,size); - m_buf_pos+=size; - return size; - } - - private: - char *m_buf; - int m_buf_size; - int m_buf_pos; -}; - -class wwwServer : public WebServerBaseClass -{ -public: - wwwServer() { } - virtual IPageGenerator *onConnection(JNL_HTTPServ *serv, int port) - { - serv->set_reply_header("Server:jnetlib_test/0.0"); - if (!strcmp(serv->get_request_file(),"/")) - { - serv->set_reply_string("HTTP/1.1 200 OK"); - serv->set_reply_header("Content-Type:text/html"); - serv->send_reply(); - - return new MemPageGenerator(strdup("Test Web Server v0.0")); - } - else - { - serv->set_reply_string("HTTP/1.1 404 NOT FOUND"); - serv->send_reply(); - return 0; // no data - } - } -}; - - -int main(int argc, char **argv) -{ - JNL::open_socketlib(); - { - wwwServer foo; - foo.addListenPort(8080); - JNL_IRC_ERROR e; - - while (1) - { - e = foo.run(); - - if(e != JNL_IRC_ERROR_NONE) - { - return 0; - } - - Sleep(10); - } - } - JNL::close_socketlib(); - return 0; -} - -#endif - - -#if (TEST_HTTPGET) -int main(int argc, char **argv) -{ - - if (argc != 3) - { - printf("usage: httpget \n"); - exit(0); - } - - JNL_HTTPGet get; - JNL::open_socketlib(); - - get.addheader("User-Agent:PooHead (Mozilla)"); - get.addheader("Accept:*/*"); - get.addheader("Host:www.stashbox.org"); - get.connect(argv[1]); - - FILE *fp=fopen(argv[2],"wb"); - int headerstate=0; - int has_printed_headers=0; - int has_printed_reply=0; - while (1) - { - int st=get.run(); - if (st<0) - { - printf("HTTPGet error: %s\n",get.geterrorstr()); - break; - } - if (get.get_status()>0) - { - if (!has_printed_reply) - { - has_printed_reply=1; - printf("reply: %s (code:%d)\n",get.getreply(),get.getreplycode()); - } - if (get.get_status()==2) - { - int len; - if (!has_printed_headers) - { - has_printed_headers=1; - printf("headers:\n"); - char *p=get.getallheaders(); - while (p&&*p) - { - printf("%s\n",p); - p+=strlen(p)+1; - } - } - while ((len=get.bytes_available()) > 0) - { - char buf[4096]; - if (len > 4096) len=4096; - len=get.get_bytes(buf,len); - if (len>0)fwrite(buf,len,1,fp); - } - } - } - if (st==1) // 1 means connection closed - { - printf("HTTPGet done!\n"); - break; - } - } - if (fp) fclose(fp); - JNL::close_socketlib(); - return 0; -} - -#endif - - -#if (TEST_HTTPPOST) -int main(int argc, char **argv) -{ - - if (argc != 3) - { - printf("usage: httppost \n"); - exit(0); - } - JNL::open_socketlib(); - - JNL_HTTPPost post; - - - post.addheader("User-Agent: 1014 Army Agent"); - post.addheader("Accept: text/html, */*"); - post.addheader("Accept-Language: en-us, en;q=0.5"); - post.addheader("Accept-Encoding: gzip,deflate"); - post.addheader("Accept-Charset: ISO-8859-1, utf-8;q=0.7,*;q=0.7"); - post.addheader("Connection: close"); - - post.addfield("t","1"); - post.addfield("pof",""); - post.addfield("rss","on"); - post.addfield("tags",""); - post.addfile("file","application/octet-stream","poopoo.txt","c:/temp/poopoo.txt"); - - post.connect(argv[1]); - - int has_printed_reply = 0; - int has_printed_headers = 0; - FILE *fp=fopen(argv[2],"wb"); - - while (1) - { - int st=post.run(); - if (st<0) - { - printf("HTTPPost error: %s\n",post.geterrorstr()); - break; - } - if (post.get_status()>0) - { - - if (!has_printed_reply) - { - has_printed_reply=1; - printf("reply: %s (code:%d)\n",post.getreply(),post.getreplycode()); - } - if (post.get_status()==2) - { - int len; - if (!has_printed_headers) - { - has_printed_headers=1; - printf("headers:\n"); - char *p=post.getallheaders(); - while (p&&*p) - { - printf("%s\n",p); - p+=strlen(p)+1; - } - } - while ((len=post.bytes_available()) > 0) - { - char buf[4096]; - if (len > 4096) len=4096; - len=post.get_bytes(buf,len); - if (len>0)fwrite(buf,len,1,fp); - } - } - } - if (st==1) // 1 means connection closed - { - printf("HTTPGet done!\n"); - break; - } - } - if (fp) fclose(fp); - JNL::close_socketlib(); - return 0; -} - -#endif - - -#if (TEST_TELNET_GATEWAY) - -int main() -{ - JNL_Connection *cons[32]={0,}; - JNL_Connection *outcons[32]={0,}; - char textpos[32][256]; - int n_cons=0; - int states[32]={0,}; - - JNL::open_socketlib(); - JNL_AsyncDNS dns; - JNL_Listen l(23); - while (!l.is_error()) - { - Sleep(30); - if (n_cons<32) - { - JNL_Connection *con=l.get_connect(); - if (con) - { - int x; - for (x = 0; x < 32; x ++) - { - if (!cons[x]) - { - cons[x]=con; - outcons[x]=0; - states[x]=0; - n_cons++; - break; - } - } - } - } - int x; - for (x = 0; x < 32; x ++) - { - if (cons[x]) - { - cons[x]->run(); - if (outcons[x]) outcons[x]->run(); - - if (cons[x]->get_state() == JNL_Connection::STATE_ERROR || cons[x]->get_state()==JNL_Connection::STATE_CLOSED || - (outcons[x] && (cons[x]->get_state() == JNL_Connection::STATE_ERROR || cons[x]->get_state()==JNL_Connection::STATE_CLOSED))) - { - delete cons[x]; - if (outcons[x]) delete outcons[x]; - outcons[x]=0; - cons[x]=0; - states[x]=0; - n_cons--; - } - else - { - if (states[x]==0) - { - cons[x]->send_string("\r\nwelcome "); - states[x]++; - } - if (states[x]==1) - { - char hoststr[256]; - int ret=dns.reverse(cons[x]->get_remote(),hoststr); - if (ret==0) - { - cons[x]->send_string(hoststr); - cons[x]->send_string(". host: "); - states[x]++; - textpos[x][0]=0; - } - if (ret==-1) - { - JNL::addr_to_ipstr(cons[x]->get_remote(),hoststr,256); - cons[x]->send_string(hoststr); - cons[x]->send_string(". host: "); - states[x]++; - textpos[x][0]=0; - } - } - if (states[x]==2) - { - char b; - while (cons[x]->recv_bytes(&b,1) && states[x]==2) - { - if (b == '\r' || b == '\n') - { - if (strlen(textpos[x])) - { - char *p=strstr(textpos[x],":"); - int port=23; - if (p) - { - *p++=0; - if (atoi(p)) port=atoi(p); - } - outcons[x]=new JNL_Connection(&dns); - outcons[x]->connect(textpos[x],port); - - char str[512]; - sprintf(str,"\r\nconnecting to port %d of %s\r\n",port,textpos[x]); - cons[x]->send_string(str); - states[x]++; - } - else states[x]=0; - } - else if (b == '\b') - { - if (textpos[x][0]) - { - textpos[x][strlen(textpos[x])-1]=0; - cons[x]->send_string("\b \b"); - } - } - else - { - textpos[x][strlen(textpos[x])+1]=0; - textpos[x][strlen(textpos[x])]=b; - cons[x]->send(&b,1); - } - } - } - if (states[x]==3) - { - char buf[1024]; - outcons[x]->run(); - int l=cons[x]->recv_bytes(buf,1024); - if (l) outcons[x]->send(buf,l); - l=outcons[x]->recv_bytes(buf,1024); - if (l) cons[x]->send(buf,l); - } - } - } - } - } - JNL::close_socketlib(); - return 0; -} - - -#endif - -#if (TEST_LISTEN) - -int main() -{ - JNL_HTTPServ *cons[32]={0,}; - char *contents[32]={0,}; - int n_cons=0; - - JNL::open_socketlib(); - JNL_AsyncDNS dns; - JNL_Listen l(8000); - while (!l.is_error()) - { - Sleep(100); - if (n_cons<32) - { - JNL_Connection *con=l.get_connect(); - if (con) - { - int x; - for (x = 0; x < 32; x ++) - { - if (!cons[x]) - { - cons[x]=new JNL_HTTPServ(con); - n_cons++; - break; - } - } - } - } - int x; - for (x = 0; x < 32; x ++) - { - if (cons[x]) - { - int r=cons[x]->run(); - if (r == -1 || r == 4) - { - if (r == -1) printf("error:%s\n",cons[x]->geterrorstr()); - delete cons[x]; - cons[x]=0; - free(contents[x]); - contents[x]=0; - n_cons--; - } - if (r == 2) - { - cons[x]->set_reply_string("HTTP/1.1 200 OK"); - cons[x]->set_reply_header("Content-type:text/plain"); - cons[x]->set_reply_header("Server:JNLTest"); - contents[x]=(char*)malloc(32768); - char *poop=cons[x]->get_request_parm("poop"); - sprintf(contents[x],"test, sucka\r\n%s\r\n\r\n",poop?poop:"no poop"); - cons[x]->send_reply(); - } - if (r == 3) - { - if (contents[x] && cons[x]->bytes_cansend()>strlen(contents[x])) - { - cons[x]->write_bytes(contents[x],strlen(contents[x])); - cons[x]->close(0); - free(contents[x]); - contents[x]=0; - } - } - } - } - } - JNL::close_socketlib(); - return 0; -} - -#endif - - -#if (TEST_SSLLISTEN) -/* -** ARGS: -** 0 Program -** 1 Port -** 2 Certificate File -** 3 PrivateKey File -*/ -int main(int argc, char **argv) -{ - JNL_HTTPServ *cons[32]={0,}; - char *contents[32]={0,}; - int n_cons=0; - unsigned short nport; - char *szprivkeyfile; - char *szcertfile; - - JNL::open_socketlib(); - JNL_AsyncDNS dns; - /* - ** Two key things for listening via SSL - ** 1) You need a private key - ** 2) You need a certificate - ** - ** For the impatient: - ** Create a private key - ** openssl genrsa -des3 -out privkey.pem 2048 - ** Create a self signed cert - ** openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095 - ** - ** If you created your private key with a passphrase, - ** you better have access to STDIN to unlock the private key. - */ - if(argc < 2) - { - nport = 8443; - szcertfile = "c:/openssl/etc/cacert.pem"; - szprivkeyfile = "c:/openssl/etc/privkey.pem"; - - } - else if(argc < 3) - { - nport = atoi(argv[1]); - if(nport <= 0) - { - nport = 8443; - } - szcertfile = "c:/openssl/etc/cacert.pem"; - szprivkeyfile = "c:/openssl/etc/privkey.pem"; - - } - else if(argc < 4) - { - struct stat buf; - nport = atoi(argv[1]); - if(nport <= 0) - { - nport = 8443; - } - szcertfile = argv[2]; - - if(stat(szcertfile,&buf)<0) - { - fprintf(stderr,"Could not open %s\n",szcertfile); - exit(-1); - } - - szprivkeyfile = "c:/openssl/etc/privkey.pem"; - } - else - { - struct stat buf; - nport = atoi(argv[1]); - if(nport <= 0) - { - nport = 8443; - } - szcertfile = argv[2]; - - if(stat(szcertfile,&buf)<0) - { - fprintf(stderr,"Could not open %s\n",szcertfile); - exit(-1); - } - szprivkeyfile = argv[3]; - - if(stat(szprivkeyfile,&buf)<0) - { - fprintf(stderr,"Could not open %s\n",szprivkeyfile); - exit(-1); - } - - } - JNL_SSL_Listen l(nport,0,szcertfile,szprivkeyfile); - while (!l.is_error()) - { - Sleep(100); - if (n_cons<32) - { - JNL_Connection *con=l.get_connect(); - if (con) - { - int x; - for (x = 0; x < 32; x ++) - { - if (!cons[x]) - { - cons[x]=new JNL_HTTPServ(con); - n_cons++; - break; - } - } - } - } - int x; - for (x = 0; x < 32; x ++) - { - if (cons[x]) - { - int r=cons[x]->run(); - if (r == -1 || r == 4) - { - if (r == -1) printf("error:%s\n",cons[x]->geterrorstr()); - delete cons[x]; - cons[x]=0; - free(contents[x]); - contents[x]=0; - n_cons--; - } - if (r == 2) - { - cons[x]->set_reply_string("HTTP/1.1 200 OK"); - cons[x]->set_reply_header("Content-type:text/plain"); - cons[x]->set_reply_header("Server:JNLTest"); - contents[x]=(char*)malloc(32768); - char *poop=cons[x]->get_request_parm("poop"); - sprintf(contents[x],"test, sucka\r\n%s\r\n\r\n",poop?poop:"no poop"); - cons[x]->send_reply(); - } - if (r == 3) - { - if (contents[x] && cons[x]->bytes_cansend()>strlen(contents[x])) - { - cons[x]->write_bytes(contents[x],strlen(contents[x])); - cons[x]->close(0); - free(contents[x]); - contents[x]=0; - } - } - } - } - } - JNL::close_socketlib(); - return 0; -} - -#endif -#if (TEST_CONNECTION) -int main() -{ - JNL::open_socketlib(); - { - JNL_AsyncDNS dns; - JNL_Connection con(&dns); - con.connect("localhost",80); - FILE *fp=fopen("c:\\hi.raw","wb"); - while (1) - { - con.run(); - if (con.get_state()==JNL_Connection::STATE_ERROR) - { - printf("error %s\n",con.get_errstr()); - } - if (con.get_state()==JNL_Connection::STATE_CLOSED) - { - } - while (con.recv_bytes_available()>0) - { - char buf[1024]; - int a=con.recv_bytes_available(); - if (a > 1024) a=1024; - con.recv_bytes(buf,a); - fwrite(buf,a,1,fp); - } - } - if (fp) fclose(fp); - } - JNL::close_socketlib(); - return 0; -} -#endif - -#if (TEST_ASYNCDNS) -int main() -{ - JNL_AsyncDNS dns; - char *hosts[]= - { - "www.firehose.net", - "gnutella.com", - "207.48.52.200", - "www.slashdot.org", - "www.google.com", - "www.winamp.com", - "www.genekan.com", - }; - char *reverses[]= - { - "64.0.160.98", - "205.188.245.120", - "207.48.52.222", - "207.48.52.200", - }; - int n=0; - int pass=0; - while (n\n"); - printf("mode: 0 for client, 1 for server\n"); - exit(0); - } - int mode=atoi(argv[1]); - - JNL::open_socketlib(); - - switch(mode) - { - case 0: // client mode - { - JNL_AsyncDNS dns; - JNL_UDPConnection con(0,&dns); // 0 chooses a random port - con.setpeer("localhost",80); - printf("Sending message...\n"); - con.send("blah",5); - while (1) - { - con.run(); - if (con.get_state()==JNL_UDPConnection::STATE_ERROR) - { - printf("error %s\n",con.get_errstr()); - } - while (con.recv_bytes_available()>0) - { - char buf[1024]; - int s=min(con.recv_bytes_available(), sizeof(buf)); - con.recv_bytes(buf,s); - printf("received message: %s\n", buf); - } - } - } - break; - case 1: // server (listening) mode - { - JNL_UDPConnection con(80); - printf("Waiting for messages...\n"); - while(1) - { - con.run(); - if (con.get_state()==JNL_UDPConnection::STATE_ERROR) - { - printf("error %s\n",con.get_errstr()); - } - while (con.recv_bytes_available()>0) - { - char buf[1024]; - int s=min(con.recv_bytes_available(), sizeof(buf)); - con.recv_bytes(buf,s); - printf("message received: %s. Replying...\n", buf); - // reply on the addr:port from sender - struct sockaddr from; - con.get_last_recv_msg_addr(&from); - con.setpeer(&from); - con.send("blorp",6); - } - } - } - break; - } - - JNL::close_socketlib(); - return 0; -} -#endif - - -#if (TEST_IRCCLIENT) -int main(int argc, char **argv) -{ - - if (argc != 3) - { - printf("usage: ircclient host port\n"); - exit(0); - } - - JNL_IRCClient irccli; - JNL::open_socketlib(); - - if(irccli.connect(argv[1],atoi(argv[2])) != true) - { - printf("%s could not connect\n",argv[0]); - return 0; - } - - irccli.nick("poopoo2"); - irccli.userregistration(); - irccli.join("#poopoo"); - - while (1) - { - bool st=irccli.run(); - - if (st != true) - { - break; - } - Sleep(200); - } - - return 0; -} - -#endif - -#if (TEST_HTTPSGET) -int main(int argc, char **argv) -{ - - if (argc != 3) - { - printf("usage: httpsget \n"); - exit(0); - } - - JNL_HTTPGet get; - JNL::open_socketlib(); - - get.addheader("User-Agent:PooHead (Mozilla)"); - get.addheader("Accept:*/*"); - get.addheader("Host:www.stashbox.org"); - get.connect(argv[1]); - - FILE *fp=fopen(argv[2],"wb"); - int headerstate=0; - int has_printed_headers=0; - int has_printed_reply=0; - while (1) - { - int st=get.run(); - if (st<0) - { - printf("HTTPGet error: %s\n",get.geterrorstr()); - break; - } - if (get.get_status()>0) - { - if (!has_printed_reply) - { - has_printed_reply=1; - printf("reply: %s (code:%d)\n",get.getreply(),get.getreplycode()); - } - if (get.get_status()==2) - { - int len; - if (!has_printed_headers) - { - has_printed_headers=1; - printf("headers:\n"); - char *p=get.getallheaders(); - while (p&&*p) - { - printf("%s\n",p); - p+=strlen(p)+1; - } - } - while ((len=get.bytes_available()) > 0) - { - char buf[4096]; - if (len > 4096) len=4096; - len=get.get_bytes(buf,len); - if (len>0)fwrite(buf,len,1,fp); - } - } - } - if (st==1) // 1 means connection closed - { - printf("HTTPGet done!\n"); - break; - } - } - if (fp) fclose(fp); - JNL::close_socketlib(); - return 0; -} - -#endif diff --git a/Frameworks/JNetLib/jnetlib/test.dsp b/Frameworks/JNetLib/jnetlib/test.dsp deleted file mode 100755 index 36f90a7c8..000000000 --- a/Frameworks/JNetLib/jnetlib/test.dsp +++ /dev/null @@ -1,166 +0,0 @@ -# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=test - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "test.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName ""$/jnetlib", NTGAAAAA" -# PROP Scc_LocalPath "." -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W4 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "test - Win32 Release" -# Name "test - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\asyncdns.cpp -# End Source File -# Begin Source File - -SOURCE=.\connection.cpp -# End Source File -# Begin Source File - -SOURCE=.\httpget.cpp -# End Source File -# Begin Source File - -SOURCE=.\httpserv.cpp -# End Source File -# Begin Source File - -SOURCE=.\listen.cpp -# End Source File -# Begin Source File - -SOURCE=.\test.cpp -# End Source File -# Begin Source File - -SOURCE=.\util.cpp -# End Source File -# Begin Source File - -SOURCE=.\webserver.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\asyncdns.h -# End Source File -# Begin Source File - -SOURCE=.\connection.h -# End Source File -# Begin Source File - -SOURCE=.\httpget.h -# End Source File -# Begin Source File - -SOURCE=.\httpserv.h -# End Source File -# Begin Source File - -SOURCE=.\jnetlib.h -# End Source File -# Begin Source File - -SOURCE=.\listen.h -# End Source File -# Begin Source File - -SOURCE=.\netinc.h -# End Source File -# Begin Source File - -SOURCE=.\util.h -# End Source File -# Begin Source File - -SOURCE=.\webserver.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/Frameworks/JNetLib/jnetlib/test.dsw b/Frameworks/JNetLib/jnetlib/test.dsw deleted file mode 100755 index e25096d17..000000000 --- a/Frameworks/JNetLib/jnetlib/test.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "test"=.\test.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/Frameworks/JNetLib/jnetlib/test.sln b/Frameworks/JNetLib/jnetlib/test.sln deleted file mode 100755 index 52cd68858..000000000 --- a/Frameworks/JNetLib/jnetlib/test.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{23B88BB3-B7CA-4ADA-8B14-E153F629CA23}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {23B88BB3-B7CA-4ADA-8B14-E153F629CA23}.Debug.ActiveCfg = Debug|Win32 - {23B88BB3-B7CA-4ADA-8B14-E153F629CA23}.Debug.Build.0 = Debug|Win32 - {23B88BB3-B7CA-4ADA-8B14-E153F629CA23}.Release.ActiveCfg = Release|Win32 - {23B88BB3-B7CA-4ADA-8B14-E153F629CA23}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/Frameworks/JNetLib/jnetlib/test.suo b/Frameworks/JNetLib/jnetlib/test.suo deleted file mode 100755 index cff292a94..000000000 Binary files a/Frameworks/JNetLib/jnetlib/test.suo and /dev/null differ diff --git a/Frameworks/JNetLib/jnetlib/test.vcproj b/Frameworks/JNetLib/jnetlib/test.vcproj deleted file mode 100755 index 596ba965a..000000000 --- a/Frameworks/JNetLib/jnetlib/test.vcproj +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Frameworks/JNetLib/jnetlib/testbnc.cpp b/Frameworks/JNetLib/jnetlib/testbnc.cpp deleted file mode 100755 index 5c3bca200..000000000 --- a/Frameworks/JNetLib/jnetlib/testbnc.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: testbnc.cpp - JNL network bounce test code -** License: see jnetlib.h -*/ - -#ifdef _WIN32 -#include -#else -#define Sleep(x) usleep((x)*1000) -#endif -#include -#include "jnetlib.h" - - -int main(int argc, char *argv[]) -{ - JNL_Connection *cons[32]={0,}; - JNL_Connection *outcons[32]={0,}; - int n_cons=0; - - if (argc != 4 || !atoi(argv[1]) || !atoi(argv[3]) || !argv[2][0]) - { - printf("usage: redir localport host remoteport\n"); - exit(1); - } - - JNL::open_socketlib(); - JNL_AsyncDNS dns; - JNL_Listen l((short)atoi(argv[1])); - printf("running...\n"); - while (!l.is_error()) - { - Sleep(10); - if (n_cons<32) - { - JNL_Connection *con=l.get_connect(); - if (con) - { - int x; - for (x = 0; x < 32; x ++) - { - if (!cons[x]) - { - outcons[x]=new JNL_Connection(); - outcons[x]->connect(argv[2],atoi(argv[3])); - cons[x]=con; - char host[256]; - JNL::addr_to_ipstr(cons[x]->get_remote(),host,sizeof(host)); - n_cons++; - printf("Connection %d (%s) opened (%d).\n",x,host,n_cons); - break; - } - } - } - } - int x; - for (x = 0; x < 32; x ++) - { - if (cons[x]) - { - cons[x]->run(); - outcons[x]->run(); - - int cerr=(cons[x]->get_state() == JNL_Connection::STATE_ERROR || cons[x]->get_state()==JNL_Connection::STATE_CLOSED); - int oerr=(outcons[x]->get_state() == JNL_Connection::STATE_ERROR || outcons[x]->get_state()==JNL_Connection::STATE_CLOSED); - - if ((!outcons[x]->send_bytes_in_queue() && !cons[x]->recv_bytes_available() && cerr) || - (!cons[x]->send_bytes_in_queue() && !outcons[x]->recv_bytes_available() && oerr) || - (cerr && oerr)) - { - char host[256]; - JNL::addr_to_ipstr(cons[x]->get_remote(),host,sizeof(host)); - delete cons[x]; - delete outcons[x]; - outcons[x]=0; - cons[x]=0; - n_cons--; - printf("Connection %d (%s) closed (%d)\n",x,host,n_cons); - } - else - { - char buf[4096]; - int l; - l=outcons[x]->send_bytes_available(); - if (l > 4096) l=4096; - if (l) l=cons[x]->recv_bytes(buf,l); - if (l) outcons[x]->send(buf,l); - - l=cons[x]->send_bytes_available(); - if (l > 4096) l=4096; - if (l) l=outcons[x]->recv_bytes(buf,l); - if (l) cons[x]->send(buf,l); - } - } - } - } - JNL::close_socketlib(); - return 0; -} diff --git a/Frameworks/JNetLib/jnetlib/udpconnection.h b/Frameworks/JNetLib/jnetlib/udpconnection.h deleted file mode 100755 index eb4a27268..000000000 --- a/Frameworks/JNetLib/jnetlib/udpconnection.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2006 CockOS, Inc. -** Author: Justin Frankel, Joshua Teitelbaum -** File: udpconnection.h - JNL SSL TCP connection interface -** License: see jnetlib.h -*/ - -#ifndef _UDPCONNECTION_H_ -#define _UDPCONNECTION_H_ - -#include "connection.h" - -class JNL_UDP_Connection : public JNL_Connection -{ -public: - JNL_UDP_Connection(struct sockaddr_in *listenon, JNL_AsyncDNS *dns=JNL_CONNECTION_AUTODNS, int sendbufsize=8192, int recvbufsize=8192); - virtual ~JNL_UDP_Connection(); - virtual void connect(int sock, struct sockaddr_in *loc=NULL); // used by the listen object, usually not needed by users. - - /* - ** Joshua Teitelbaum 1/27/2006 Adding new BSD socket analogues for SSL compatibility - */ -protected: - virtual void socket_shutdown(); - virtual int socket_recv(char *buf, int len, int options); - virtual int socket_send(char *buf, int len, int options); - virtual int socket_connect(); - - -}; -#endif \ No newline at end of file diff --git a/Frameworks/JNetLib/jnetlib/util.cpp b/Frameworks/JNetLib/jnetlib/util.cpp deleted file mode 100755 index fe3352d20..000000000 --- a/Frameworks/JNetLib/jnetlib/util.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: util.cpp - JNL implementation of basic network utilities -** License: see jnetlib.h -*/ - -#include "netinc.h" - -#include "util.h" - -int JNL::open_socketlib() -{ -#ifdef _WIN32 - WSADATA wsaData; - if (WSAStartup(MAKEWORD(1, 1), &wsaData)) return 1; -#endif - return 0; -} -void JNL::close_socketlib() -{ -#ifdef _WIN32 - WSACleanup(); -#endif -} -unsigned long JNL::ipstr_to_addr(const char *cp) -{ - return ::inet_addr(cp); -} - -void JNL::addr_to_ipstr(unsigned long addr, char *host, int maxhostlen) -{ - struct in_addr a; a.s_addr=addr; - char *p=::inet_ntoa(a); strncpy(host,p?p:"",maxhostlen); -} diff --git a/Frameworks/JNetLib/jnetlib/util.h b/Frameworks/JNetLib/jnetlib/util.h deleted file mode 100755 index 252489647..000000000 --- a/Frameworks/JNetLib/jnetlib/util.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2001 Nullsoft, Inc. -** Author: Justin Frankel -** File: util.h - JNL interface for basic network utilities -** License: see jnetlib.h -** -** routines you may be interested in: -** JNL::open_socketlib(); -** opens the socket library. Call this once before using any network -** code. If you create a new thread, call this again. Only really an -** issue for Win32 support, but use it anyway for portability/ -** -** JNL::close_Socketlib(); -** closes the socketlib. Call this when you're done with the network, -** after all your JNetLib objects have been destroyed. -** -** unsigned long JNL::ipstr_to_addr(const char *cp); -** gives you the integer representation of a ip address in dotted -** decimal form. -** -** JNL::addr_to_ipstr(unsigned long addr, char *host, int maxhostlen); -** gives you the dotted decimal notation of an integer ip address. -** -*/ - -#ifndef _UTIL_H_ -#define _UTIL_H_ - -class JNL -{ - public: - static int open_socketlib(); - static void close_socketlib(); - static unsigned long ipstr_to_addr(const char *cp); - static void addr_to_ipstr(unsigned long addr, char *host, int maxhostlen); -}; - -#endif //_UTIL_H_ diff --git a/Frameworks/JNetLib/jnetlib/webserver.cpp b/Frameworks/JNetLib/jnetlib/webserver.cpp deleted file mode 100755 index 1dcd73de0..000000000 --- a/Frameworks/JNetLib/jnetlib/webserver.cpp +++ /dev/null @@ -1,376 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2000-2003 Nullsoft, Inc. -** Author: Justin Frankel -** File: webserver.cpp - Generic simple webserver baseclass -** License: see jnetlib.h -** see test.cpp for an example of how to use this class -*/ - -#include -#include "jnetlib.h" -#include "webserver.h" - -class WS_ItemList -{ - public: - WS_ItemList() { m_size=0; m_list=0; } - ~WS_ItemList() { ::free(m_list); } - - void *Add(void *i); - void *Get(int w); - void Del(int idx); - int GetSize(void) { return m_size; } - protected: - void **m_list; - int m_size; -}; - -class WS_conInst -{ -public: - WS_conInst(JNL_Connection *c, int which_port); - ~WS_conInst(); - - // these will be used by WebServerBaseClass::onConnection yay - JNL_HTTPServ m_serv; - IPageGenerator *m_pagegen; - - - int m_port; // port this came in on - time_t m_connect_time; -}; - - - -void *WS_ItemList::Add(void *i) -{ - if (!m_list || !(m_size&31)) - { - m_list=(void**)::realloc(m_list,sizeof(void*)*(m_size+32)); - } - m_list[m_size++]=i; - return i; -} -void *WS_ItemList::Get(int w) { if (w >= 0 && w < m_size) return m_list[w]; return NULL; } - -void WS_ItemList::Del(int idx) -{ - if (m_list && idx >= 0 && idx < m_size) - { - m_size--; - if (idx != m_size) ::memcpy(m_list+idx,m_list+idx+1,sizeof(void *)*(m_size-idx)); - if (!(m_size&31)&&m_size) // resize down - { - m_list=(void**)::realloc(m_list,sizeof(void*)*m_size); - } - } -} - - -WS_conInst::WS_conInst(JNL_Connection *c, int which_port) : m_serv(c), m_port(which_port) -{ - m_pagegen=0; - time(&m_connect_time); -} - -WS_conInst::~WS_conInst() -{ - delete m_pagegen; -} - -WebServerBaseClass::~WebServerBaseClass() -{ - int x; - for (x = 0; x < m_connections->GetSize(); x ++) - { - delete (WS_conInst *)m_connections->Get(x); - } - delete m_connections; - for (x = 0; x < m_listeners->GetSize(); x ++) - { - delete (JNL_Listen *)m_listeners->Get(x); - } - delete m_listeners; -} - -WebServerBaseClass::WebServerBaseClass() -{ - m_connections=new WS_ItemList; - m_listeners=new WS_ItemList; - m_listener_rot=0; - m_timeout_s=15; - m_max_con=100; -} - - -void WebServerBaseClass::setMaxConnections(int max_con) -{ - m_max_con=max_con; -} - -void WebServerBaseClass::setRequestTimeout(int timeout_s) -{ - m_timeout_s=timeout_s; -} - -int WebServerBaseClass::addListenPort(int port, unsigned long which_interface) -{ - int ffree=-1; - removeListenPort(port); - - JNL_Listen *p=new JNL_Listen(port,which_interface); - m_listeners->Add((void *)p); - if (p->is_error()) return -1; - return 0; -} - -void WebServerBaseClass::removeListenPort(int port) -{ - int x; - for (x = 0; x < m_listeners->GetSize(); x ++) - { - JNL_Listen *p=(JNL_Listen *)m_listeners->Get(x); - if (p->port()==port) - { - delete p; - m_listeners->Del(x); - break; - } - } -} - -void WebServerBaseClass::removeListenIdx(int idx) -{ - if (idx >= 0 && idx < m_listeners->GetSize()) - { - JNL_Listen *p=(JNL_Listen *)m_listeners->Get(idx); - delete p; - m_listeners->Del(idx); - } -} - -int WebServerBaseClass::getListenPort(int idx, int *err) -{ - JNL_Listen *p=(JNL_Listen *)m_listeners->Get(idx); - if (p) - { - if (err) *err=p->is_error(); - return p->port(); - } - return 0; -} - -void WebServerBaseClass::attachConnection(JNL_Connection *con, int port) -{ - m_connections->Add((void*)new WS_conInst(con,port)); -} - -void WebServerBaseClass::run(void) -{ - int nl; - if (m_connections->GetSize() < m_max_con && (nl=m_listeners->GetSize())) - { - JNL_Listen *l=(JNL_Listen *)m_listeners->Get(m_listener_rot++ % nl); - JNL_Connection *c=l->get_connect(); - if (c) - { - attachConnection(c,l->port()); - } - } - int x; - for (x = 0; x < m_connections->GetSize(); x ++) - { - if (run_connection((WS_conInst *)m_connections->Get(x))) - { - delete ((WS_conInst *)m_connections->Get(x)); - m_connections->Del(x--); - } - } -} - -int WebServerBaseClass::run_connection(WS_conInst *con) -{ - int s=con->m_serv.run(); - if (s < 0) - { - // m_serv.geterrorstr() - return 1; - } - if (s < 2) - { - // return 1 if we timed out - return time(NULL)-con->m_connect_time > m_timeout_s; - } - if (s < 3) - { - con->m_pagegen=onConnection(&con->m_serv,con->m_port); - return 0; - } - if (s < 4) - { - if (!con->m_pagegen) - { - return !con->m_serv.bytes_inqueue(); - } - char buf[16384]; - int l=con->m_serv.bytes_cansend(); - if (l > 0) - { - if (l > sizeof(buf))l=sizeof(buf); - l=con->m_pagegen->GetData(buf,l); - if (l < (con->m_pagegen->IsNonBlocking() ? 0 : 1)) // if nonblocking, this is l < 0, otherwise it's l<1 - { - return !con->m_serv.bytes_inqueue(); - } - if (l>0) - con->m_serv.write_bytes(buf,l); - } - return 0; - } - return 1; // we're done by this point -} - - - -void WebServerBaseClass::url_encode(char *in, char *out, int max_out) -{ - while (*in && max_out > 4) - { - if ((*in >= 'A' && *in <= 'Z')|| - (*in >= 'a' && *in <= 'z')|| - (*in >= '0' && *in <= '9')|| *in == '.' || *in == '_' || *in == '-') - { - *out++=*in++; - max_out--; - } - else - { - int i=*in++; - *out++ = '%'; - int b=(i>>4)&15; - if (b < 10) *out++='0'+b; - else *out++='A'+b-10; - b=i&15; - if (b < 10) *out++='0'+b; - else *out++='A'+b-10; - max_out-=3; - } - } - *out=0; -} - - -void WebServerBaseClass::url_decode(char *in, char *out, int maxlen) -{ - while (*in && maxlen>1) - { - if (*in == '+') - { - in++; - *out++=' '; - } - else if (*in == '%' && in[1] != '%' && in[1]) - { - int a=0; - int b=0; - for ( b = 0; b < 2; b ++) - { - int r=in[1+b]; - if (r>='0'&&r<='9') r-='0'; - else if (r>='a'&&r<='z') r-='a'-10; - else if (r>='A'&&r<='Z') r-='A'-10; - else break; - a*=16; - a+=r; - } - if (b < 2) *out++=*in++; - else { *out++=a; in += 3;} - } - else *out++=*in++; - maxlen--; - } - *out=0; -} - - - - - -void WebServerBaseClass::base64decode(char *src, char *dest, int destsize) -{ - int accum=0; - int nbits=0; - while (*src) - { - int x=0; - char c=*src++; - if (c >= 'A' && c <= 'Z') x=c-'A'; - else if (c >= 'a' && c <= 'z') x=c-'a' + 26; - else if (c >= '0' && c <= '9') x=c-'0' + 52; - else if (c == '+') x=62; - else if (c == '/') x=63; - else break; - - accum <<= 6; - accum |= x; - nbits += 6; - - while (nbits >= 8) - { - if (--destsize<=0) break; - nbits-=8; - *dest++ = (char)((accum>>nbits)&0xff); - } - - } - *dest=0; -} - -void WebServerBaseClass::base64encode(char *in, char *out) -{ - char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - int shift = 0; - int accum = 0; - - while (*in) - { - if (*in) - { - accum <<= 8; - shift += 8; - accum |= *in++; - } - while ( shift >= 6 ) - { - shift -= 6; - *out++ = alphabet[(accum >> shift) & 0x3F]; - } - } - if (shift == 4) - { - *out++ = alphabet[(accum & 0xF)<<2]; - *out++='='; - } - else if (shift == 2) - { - *out++ = alphabet[(accum & 0x3)<<4]; - *out++='='; - *out++='='; - } - - *out++=0; -} - -int WebServerBaseClass::parseAuth(char *auth_header, char *out, int out_len)//returns 0 on unknown auth, 1 on basic -{ - char *authstr=auth_header; - *out=0; - if (!auth_header || !*auth_header) return 0; - while (*authstr == ' ') authstr++; - if (strnicmp(authstr,"basic ",6)) return 0; - authstr+=6; - while (*authstr == ' ') authstr++; - base64decode(authstr,out,out_len); - return 1; -} \ No newline at end of file diff --git a/Frameworks/JNetLib/jnetlib/webserver.h b/Frameworks/JNetLib/jnetlib/webserver.h deleted file mode 100755 index 2fb72d8ab..000000000 --- a/Frameworks/JNetLib/jnetlib/webserver.h +++ /dev/null @@ -1,142 +0,0 @@ -/* -** JNetLib -** Copyright (C) 2003 Nullsoft, Inc. -** Author: Justin Frankel -** File: webserver.h - Generic simple webserver baseclass -** License: see jnetlib.h -** -** You can derive your object from WebServerBaseClass to do simple web serving. Example: - - class wwwServer : public WebServerBaseClass - { - public: - wwwServer() { } - virtual IPageGenerator *onConnection(JNL_HTTPServ *serv, int port) - { - serv->set_reply_header("Server:jnetlib_test/0.0"); - if (!strcmp(serv->get_request_file(),"/")) - { - serv->set_reply_string("HTTP/1.1 200 OK"); - serv->set_reply_header("Content-Type:text/html"); - serv->send_reply(); - - return new MemPageGenerator(strdup("Test Web Server v0.0")); - } - else - { - serv->set_reply_string("HTTP/1.1 404 NOT FOUND"); - serv->send_reply(); - return 0; // no data - } - } - }; - - - wwwServer foo; - foo.addListenPort(8080); - while (1) - { - foo.run(); - Sleep(10); - } - - You will also need to derive from the IPageGenerator interface to provide a data stream, here is an - example of MemPageGenerator: - - class MemPageGenerator : public IPageGenerator - { - public: - virtual ~MemPageGenerator() { free(m_buf); } - MemPageGenerator(char *buf, int buf_len=-1) { m_buf=buf; if (buf_len >= 0) m_buf_size=buf_len; else m_buf_size=strlen(buf); m_buf_pos=0; } - virtual int GetData(char *buf, int size) // return 0 when done - { - int a=m_buf_size-m_buf_pos; - if (a < size) size=a; - memcpy(buf,m_buf+m_buf_pos,size); - m_buf_pos+=size; - return size; - } - - private: - char *m_buf; - int m_buf_size; - int m_buf_pos; - }; - - -** -*/ - - -#ifndef _JNL_WEBSERVER_H_ -#define _JNL_WEBSERVER_H_ - -#include "httpserv.h" - -class IPageGenerator -{ -public: - virtual ~IPageGenerator() { }; - virtual int IsNonBlocking() { return 0; } // override this and return 1 if GetData should be allowed to return 0 - virtual int GetData(char *buf, int size)=0; // return < 0 when done (or 0 if IsNonBlocking() is 1) -}; - - - -class WS_ItemList; -class WS_conInst; - -class WebServerBaseClass -{ -protected: // never create one of these directly, always derive - WebServerBaseClass(); - -public: - virtual ~WebServerBaseClass(); - - // stuff for setting limits/timeouts - void setMaxConnections(int max_con); - void setRequestTimeout(int timeout_s); - - // stuff for setting listener port - int addListenPort(int port, unsigned long which_interface=0); - int getListenPort(int idx, int *err=0); - void removeListenPort(int port); - void removeListenIdx(int idx); - - // call this a lot :) - void run(void); - - // if you want to manually attach a connection, use this: - // you need to specify the port it came in on so the web server can build - // links - void attachConnection(JNL_Connection *con, int port); - - // derived classes need to override this one =) - virtual IPageGenerator *onConnection(JNL_HTTPServ *serv, int port)=0; - - // stats getting functions - - // these can be used externally, as well as are used by the web server - static void url_encode(char *in, char *out, int max_out); - static void url_decode(char *in, char *out, int maxlen); - static void base64decode(char *src, char *dest, int destsize); - static void base64encode(char *in, char *out); - - static int parseAuth(char *auth_header, char *out, int out_len);//returns 0 on unknown auth, 1 on basic - - -private: - int run_connection(WS_conInst *con); - - int m_timeout_s; - int m_max_con; - - JNL_AsyncDNS m_dns; - - WS_ItemList *m_listeners; - int m_listener_rot; - WS_ItemList *m_connections; -}; - -#endif//_JNL_WEBSERVER_H_ \ No newline at end of file