From 7ff2ff6ab3048e6ef675854a4e2bcabb77f99278 Mon Sep 17 00:00:00 2001 From: Phitherek Date: Tue, 26 Feb 2013 23:51:23 +0100 Subject: [PATCH] cleanup, after testing - all works --- ClientSocket.cpp | 5 +++++ ClientSocket.o | Bin 13152 -> 0 bytes HTTPClientSocket.cpp | 43 ++++++++++++++++++++---------------- HTTPClientSocket.o | Bin 25472 -> 0 bytes Makefile | 20 +++++++++++++---- NetSocket.o | Bin 10272 -> 0 bytes NetworkException.o | Bin 8216 -> 0 bytes ServerSocket.cpp | 49 +++++++++++++++++++++--------------------- ServerSocket.h | 24 ++++++--------------- ServerSocket.o | Bin 22240 -> 0 bytes SocketException.o | Bin 7848 -> 0 bytes libnetsocketpp.so.0.1 | Bin 53649 -> 0 bytes tests/httptest.cpp | 22 +++++++++++++++++++ tests/nstest | Bin 48120 -> 0 bytes tests/nstest.cpp | 2 +- tests/tcpclitest.cpp | 24 +++++++++++++++++++++ tests/tcpsrvtest.cpp | 42 ++++++++++++++++++++++++++++++++++++ tests/udprecvtest.cpp | 20 +++++++++++++++++ tests/udpsendtest.cpp | 22 +++++++++++++++++++ 19 files changed, 207 insertions(+), 66 deletions(-) delete mode 100644 ClientSocket.o delete mode 100644 HTTPClientSocket.o delete mode 100644 NetSocket.o delete mode 100644 NetworkException.o delete mode 100644 ServerSocket.o delete mode 100644 SocketException.o delete mode 100755 libnetsocketpp.so.0.1 create mode 100644 tests/httptest.cpp delete mode 100755 tests/nstest create mode 100644 tests/tcpclitest.cpp create mode 100644 tests/tcpsrvtest.cpp create mode 100644 tests/udprecvtest.cpp create mode 100644 tests/udpsendtest.cpp diff --git a/ClientSocket.cpp b/ClientSocket.cpp index 6df2684..d83ad74 100644 --- a/ClientSocket.cpp +++ b/ClientSocket.cpp @@ -10,6 +10,11 @@ conret = connect(_descriptor, _servinfo->ai_addr, _servinfo->ai_addrlen); if(conret == -1) { throw NetworkException("connect", strerror(errno)); } +} else if(protocol == "UDP") { +int bindret = bind(_descriptor, _servinfo->ai_addr, _servinfo->ai_addrlen); + if(bindret == 1) { + throw NetworkException("bind", strerror(errno)); + } } } diff --git a/ClientSocket.o b/ClientSocket.o deleted file mode 100644 index 08ca8b76f2e54529171a66818d2f055b22aa00ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13152 zcmbuF4RBP|702)H<`F_wQv5=&x+o|xbtQbG(gDN53q*{BXp7);*=#<>kd3<=2xuf4 zqimOLu!>l9gsQb)qfn~|I+iHZFGj&}RB9cGqbM}Aehg#Lp{D2Dckk|h-|mY}dztt4 z-QPX;oO91T_r8y?Hdr~=>+uL(JmM!JThmmCs?zNBEO|Lg3>T+M*%GRApP_Wrn8`!4 z7gw8|M_bHf`+a7zb%U9#S!X7%=rB_?9cDVX#Z10qCSN|xN(ikZv@I8HAk>qCg7=x} zE4G;Fnr&vfm6}v9XB2k812pYNJe| z3~KF2ZoIj_zn>;(ooSTv4CYVl5PM=fvdVXpJXBxe?kSOys*-P-$@i2S$>95)?eEh( z@1pQI=XtZ%S7@F$Q(QLW&hu6+PZPS8nkjd4a*!}*ImJ0UH?o?UPtd^1Gd$x-W_AnA zb1L}$kp*@n+(R`+3(y*vlWO2au#VS5W$Jof1Q4@21TaHC{KYAo=FAoA2=G-7d33enf^GE2k^UhE%)? z%=t#yp6;g#F z*gHmE1ZlhFwT=-iy!74n+yNp;196%Cec8#V*+(Aa?^VH1LF7{sp_{$)zCgYBMvA^u zRVOKG;9W1nv&IMT-Arxdg`Wx@Ht&1sb}z4NK^48lRZ?AUNjd9AZ9D@l9xZ~4T|d86 zCVRD;_I9^HSM`ntOCp=lx-q+?^0zx%UuI@?7f2Ak!@BL&Zu&CO*7{)5vLV-v*|_KH zGjH9qg(55;Xyks(&&6ZuX@(xETKPHeGwmJSZ>hdcZnf!}&!|cwup4G2`$pK$Y}u~a z$0ymXbI;go?dK;lR+?--k!(HQ*?z*)I`P)_*TU1vLc#@ z_({Uw5Q_W5P0@Iy)}LsI_*L)5XmddJsEb8ci2i=h{BiXBdYRGV6IU8reWKoY$S2}_ zwU$}RL#+>aCO=vvHhGP8MdDen(dQGddyV&e;#WR{_}e}b*;zy<(l+zrav`4a7<&xy zp2zsDA^zzx?lr_t?`<@mjw0ipLE@1jn!A0*3nk)7vRWek>ND;x5qA~cB*dGBan}%W%rK6Xh&u-v zAC-u=SXsK*_;85WR&4AUB6b%We;y*b2NV8937tOR(-TAJ^evyr@xfD#3UM7>^L?CW zlG5flrOoH`&O}F$t~0MuT|GnZ>3Nl>#l6fcFTcb;cHY98asJ7HX@QAK@@)0%SyNTH zNO;;xiyvSza^y+HgEvr!MpK0kE+*YKiuhvoDW!LK%TFFOZ@sUx$ak5SWXBS&k4=wnJj-amBX&P-yNo#%lTW(cTP_9sgqAX=A{U8nud@5ghCqDvibQC+2*eXH z`?o<~#Uf3iKqAtX5P{lIA|wLK<8cv)MeRy`IBZ4Q!jYDQMg5v0)S~4B){^Q(w!BC&Y1In>mcSZ%GGAOhj&iWQM&^1hjtaDY`I9~MwEOEF3xSIlm-_ z{drEE{r$vvryE2EmMT>_^aG^X{+f=Y3$0T#{@r%2U7Ik>{$>AZnPmLo?+RQlpo8sm z8S9GdlC;~8{OsDHQe|5S$qj;i1| zGaKY^;Ng>P3vwOXm-6iFzksN7Of1;T1EZqj%<<>%RyrRv-$3jXI-K#_uk34i5|PDO zPZ2F-|9AoWoJzXCw*PBlJSM081K-pBgD&<<)rPO_@c3D!)Ba9k(!L}9z2DRRQ!e($ z7O+3Gfc?KK`xEFF%VA|-EuT!2o`3!OF}3LHj1XOXqxvJ`Yp3kjiaCaFCk3_5a&*w~ zV_jU1(NSprXQ}b~Rez5EsdVW6dR}<%bIv^>F^hvmg}-lMaa84a@_eTbRcw$-3*B$I zoJj}YH=Xu*O%$@M;Bk-?koi7g$FqL ziWkgSDvofzc$V)8eR9-D>}#LQtU{c#E5G<;))eCTne;G;4TJgOXF@Ko(J{)al9aBs z|DVuxDILyof4$~45ju$<2uKMpYOuQ6K8*Z zuC@+-zu;2kB46XeuTy$Ps3pwrA6zgb!lC0RagboFR3ge_4SE{SR_18OMXJ$smWY&c2 zFsCfIlBEBK7cBj~!?MC{AuH6xZ&QhgdWoZWN{9IUjC>*!RwNc{j#^TRTPe;&qB0`V z@2Ul1a-BQmd0#e_++P)q-4K*-h}4~Q$}sU5xQiNwBer?nl-S~m?-C>*ym{u z`BR%B&6JOFUb#LcObH*Os{As=C;BQiu<6PC(JI(zf4kyq`8jIfK9lMriHyx@^tRj* zibd#UJS-C-F}*Pwx0Z+Ek;xUb>{L$F#-mmPtvh<(C*{=+A$zv$^r8<3w0v9CG7E>A z!;vN-^!<&WG5Hzp1bvX>B0uO+-N~znadGkn8%xg5o?1@=_*uX^T=;qyzDaT3`uJU1 z>)#CW{Qj=_8^HNdQ}aW>&j!xV*<5&BKcYj+^Yc3w=I79%xtH#zT$uB#xaRT`xZ-}` zqd^|^Pf}cui@L~iDaiYYX#ER;j{?2~IL5gS_<0~71CH{y07v;Q#rb*ue9+Skd^B)= z&f&uG8AFHm|M$Sr?z1j@uM2+%IDg~N`VRp|{a*pcad|oLRM=0HKNUF2j|6@p_0e`O z20j+}CBV_o7RC7o^SKS=F`w51=WjCF?gPLt0=^x10Ql>`G5_BOj`{f^aLoUI0LT2- zkMbN(KiEBqo;SEKNBtueXLTG0{hZIwV_ckirUD;D?K%#Z1IKw>2>d*dUjiKE>wu&D z3dNoIzY6$h(0?1~!Tf(faXnuB8Q~F-$9dle9OwN5;5hI7z%K@W&fq{&;UAp$F~D(N z#skNBp9CD|y#lzOZ0LEZ0gn1>71wdlZ<0+Qk9yVu$9Ycy$9dcY9Ov;7;3&TpILdEV z+&S+(z(>P)_ktdr_ang3?l-{EF8_gt3pbHHF zuLq9uQQ+v$8sO;9(~5g(ytp4e5AwJ!J_lY#eRRGRb7v|XH_Y?1fMXt>103`GLg1L^ z<-q-9L)%>h9QD^LuE(Xn%SAyR^{fMqdAG=D8E;6XP&)J0eM_6!_N-B7fuo*D4m~=~ zmx4U%SqL2CyaYJLtqwTGEe0IrZvl?-U5fM1`7o|-;27uoK@Y}xA8@ow|CvG-jx*Z* z5;)2a8d6yP6yO(rhRz%Kwk7C7pk0UZ4a0!R6)fusC&z|o&Z;OI{qaMYg!j`}wO zNBPHqqx=)V(Vv~b(Vtg*y-rewg27 zz|n5A3ttT!?fy=2FX?8VbY49U@>7661@cpYKL;H3yr?**`!tY$4fIb3&U-r-)-jn5 z?GH099y-`p{r4+oT$s<0SGgzV;{fsBFuAY}{M*-9No~$;y703f7iPus%0B7uRLuF% ze>eD)y{{{?hKTAu&_ diff --git a/HTTPClientSocket.cpp b/HTTPClientSocket.cpp index a979d2e..89c143b 100644 --- a/HTTPClientSocket.cpp +++ b/HTTPClientSocket.cpp @@ -43,21 +43,23 @@ _content = ""; void HTTPReply::parse() { std::string action = "firstline"; std::string parsed = ""; + std::string scl = ""; bool postspace = false; for(unsigned int i = 0; i < _raw.length(); i++) { if(action == "firstline") { - if(_raw[i] == ' ') { - _protocol = parsed; - parsed = ""; - postspace = true; - } else if(postspace == true) { - if(_raw[i] == '\n') { + if(postspace == true) { + if(_raw[i] == '\r') { _response = parsed; parsed = ""; - action = "reqparse"; + action = "reqparse"; + i++; } else { - parsed += _raw[i]; + parsed += _raw[i]; } + } else if(_raw[i] == ' ') { + _protocol = parsed; + parsed = ""; + postspace = true; } else { parsed += _raw[i]; } @@ -76,29 +78,32 @@ void HTTPReply::parse() { action = "ct"; } parsed = ""; - } else if(_raw[i] == '\n') { - if(_raw[i+1] == '\n') { + } else if(_raw[i] == '\r') { + if(_raw[i-2] == '\r') { action = "content"; } + i++; parsed = ""; } else { parsed += _raw[i]; } } else if(action == "timestamp") { - if(_raw[i] == '\n') { + if(_raw[i] == '\r') { + i++; action = "reqparse"; } else { _timestamp += _raw[i]; } } else if(action == "server") { - if(_raw[i] == '\n') { + if(_raw[i] == '\r') { + i++; action = "reqparse"; } else { _server += _raw[i]; } } else if(action == "cl") { - std::string scl = ""; - if(_raw[i] == '\n') { + if(_raw[i] == '\r') { + i++; for(unsigned int j = 0; j < scl.length(); j++) { if(!isdigit(scl[j])) { throw SocketException("Content-Length is not a number!"); @@ -110,14 +115,16 @@ void HTTPReply::parse() { } else { scl += _raw[i]; } -} else if(action == "connection") { - if(_raw[i] == '\n') { +} else if(action == "conn") { + if(_raw[i] == '\r') { + i++; action = "reqparse"; } else { _connection += _raw[i]; } } else if(action == "ct") { - if(_raw[i] == '\n') { + if(_raw[i] == '\r') { + i++; action = "reqparse"; } else { _ct += _raw[i]; @@ -179,7 +186,7 @@ HTTPClientSocket::HTTPClientSocket(std::string host = NULL, std::string service _request += "Host: "; _request += host; } - _request += "\n"; + _request += "\n\n"; send(_request, 0); recv(0); std::string rawreply; diff --git a/HTTPClientSocket.o b/HTTPClientSocket.o deleted file mode 100644 index 6dc55cdffabf2f8ebdb0e42d65064d8856efc6d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25472 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 SSO_@RG5-$f3l?t1(SHNZ4Eq-V diff --git a/Makefile b/Makefile index 62b5a29..f821e7e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CXXFLAGS=-Wall -fPIC CXXFLAGS2=-shared -TESTCXXFLAGS=-Wall +TESTCXXFLAGS=-Wall -lnetsocketpp all: ${CXX} ${CXXFLAGS} -c *.cpp ${CXX} ${CXXFLAGS2} -Wl,-soname,libnetsocketpp.so.0 -o libnetsocketpp.so.0.1 *.o @@ -11,7 +11,19 @@ install: ln -sf /usr/lib/libnetsocketpp.so.0.1 /usr/lib/libnetsocketpp.so.0 ln -sf /usr/lib/libnetsocketpp.so.0.1 /usr/lib/libnetsocketpp.so test: - ${CXX} ${TESTCXXFLAGS} -o tests/nstest tests/nstest.cpp NetSocket.cpp ClientSocket.cpp HTTPClientSocket.cpp ServerSocket.cpp NetworkException.cpp SocketException.cpp -debugtest: - ${CXX} ${TESTCXXFLAGS} -g -o tests/nstest tests/nstest.cpp NetSocket.cpp ClientSocket.cpp HTTPClientSocket.cpp ServerSocket.cpp NetworkException.cpp SocketException.cpp + ${CXX} ${TESTCXXFLAGS} -o tests/nstest tests/nstest.cpp + ${CXX} ${TESTCXXFLAGS} -o tests/tcpsrvtest tests/tcpsrvtest.cpp + ${CXX} ${TESTCXXFLAGS} -o tests/tcpclitest tests/tcpclitest.cpp + ${CXX} ${TESTCXXFLAGS} -o tests/udprecvtest tests/udprecvtest.cpp + ${CXX} ${TESTCXXFLAGS} -o tests/udpsendtest tests/udpsendtest.cpp + ${CXX} ${TESTCXXFLAGS} -o tests/httptest tests/httptest.cpp + +debugtest: + ${CXX} ${TESTCXXFLAGS} -g -o tests/nstest tests/nstest.cpp + ${CXX} ${TESTCXXFLAGS} -g -o tests/tcpsrvtest tests/tcpsrvtest.cpp + ${CXX} ${TESTCXXFLAGS} -g -o tests/tcpclitest tests/tcpclitest.cpp + ${CXX} ${TESTCXXFLAGS} -g -o tests/udprecvtest tests/udprecvtest.cpp + ${CXX} ${TESTCXXFLAGS} -g -o tests/udpsendtest tests/udpsendtest.cpp + ${CXX} ${TESTCXXFLAGS} -g -o tests/httptest tests/httptest.cpp + diff --git a/NetSocket.o b/NetSocket.o deleted file mode 100644 index ae137c079f212e91674a527e094ea6f15db6fdd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10272 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 m`_D6ucJ5H=cNs@JbgpuOaTQug&c*V`Mz-Ao) diff --git a/NetworkException.o b/NetworkException.o deleted file mode 100644 index 0dd4f5a6d66334c32a221a6fcc08de1c2aa506a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8216 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 diff --git a/ServerSocket.cpp b/ServerSocket.cpp index 6cf605d..d69a1d9 100644 --- a/ServerSocket.cpp +++ b/ServerSocket.cpp @@ -3,18 +3,6 @@ #include using namespace NetSocketPP; -ServerLoopCondition::ServerLoopCondition(bool state) { -_cond = state; -} - -void ServerLoopCondition::setState(bool state) { -_cond = state; -} - -bool ServerLoopCondition::operator()() { -return _cond; -} - ServerFunctionArgs::ServerFunctionArgs() { _tab = NULL; _size = 0; @@ -27,7 +15,7 @@ _size = 0; } else { _size = sfa._size; _tab = new std::string[_size]; -for(int i = 0; i < _size; i++) { +for(unsigned int i = 0; i < _size; i++) { _tab[i] = sfa._tab[i]; } } @@ -42,10 +30,10 @@ _tab = NULL; } void ServerFunctionArgs::addArgument(std::string arg) { -int newSize = _size+1; +unsigned int newSize = _size+1; std::string* newTab = NULL; newTab = new std::string[newSize]; -for(int i = 0; i < _size; i++) { +for(unsigned int i = 0; i < _size; i++) { newTab[i] = _tab[i]; } newTab[newSize-1] = arg; @@ -54,31 +42,29 @@ delete[] _tab; _tab = newTab; } -std::string ServerFunctionArgs::getArgument(int idx) { -if(idx < 0 or idx >= _size) { +std::string ServerFunctionArgs::getArgument(unsigned int idx) { +if(idx >= _size) { throw SocketException("Index out of bounds!"); } else { return _tab[idx]; } } -std::string ServerFunctionArgs::operator[](int idx) { +std::string ServerFunctionArgs::operator[](unsigned int idx) { return getArgument(idx); } ServerSocket::ServerSocket(std::string host, std::string service, std::string protocol): NetSocket(host, service, protocol) { -if(protocol == "TCP") { int bindret = bind(_descriptor, _servinfo->ai_addr, _servinfo->ai_addrlen); if(bindret == 1) { throw NetworkException("bind", strerror(errno)); } } -} ServerSocket::~ServerSocket() { close(_newDescriptor); } -void ServerSocket::startServer(ServerFunctionArgs functionOutput ,ServerFunctionArgs (*serverMain)(ServerFunctionArgs, ServerLoopCondition&, ServerSocket*), ServerFunctionArgs functionInput, ServerLoopCondition condition, int connectionLimit) { +void ServerSocket::startServer(ServerFunctionArgs& functionOutput ,ServerFunctionArgs& (*serverMain)(ServerFunctionArgs, ServerSocket*), ServerFunctionArgs functionInput, bool infinite, unsigned int iternum, int connectionLimit) { if(_protocol == "UDP") { throw SocketException("startServer() works only with TCP! Use send() and recv() methods to transfer data via UDP!"); } @@ -92,21 +78,34 @@ void ServerSocket::startServer(ServerFunctionArgs functionOutput ,ServerFunction if(sigaction(SIGCHLD, &_sa, NULL) == -1) { throw SocketException("Sigaction failed!"); } - while(condition()) { + if(infinite == true) { + while(true) { _newDescriptor = accept(_descriptor, (sockaddr*)&_their_addr, &_addr_size); if(_newDescriptor == -1) { throw NetworkException("accept", strerror(errno)); } if(!fork()) { close(_descriptor); - functionOutput = serverMain(functionInput, condition, this); + functionOutput = serverMain(functionInput, this); } } + } else { + for(unsigned int i = 0; i < iternum; i++) { + _newDescriptor = accept(_descriptor, (sockaddr*)&_their_addr, &_addr_size); + if(_newDescriptor == -1) { + throw NetworkException("accept", strerror(errno)); + } + if(!fork()) { + close(_descriptor); + functionOutput = serverMain(functionInput, this); + } + } + } } int ServerSocket::send(std::string msg, int flags) { if(_protocol == "TCP") { - int sr = ::send(_descriptor, msg.c_str(), msg.length(), flags); + int sr = ::send(_newDescriptor, msg.c_str(), msg.length(), flags); if(sr == -1) { throw NetworkException("send", strerror(errno)); } @@ -123,7 +122,7 @@ int ServerSocket::send(std::string msg, int flags) { int ServerSocket::recv(int flags) { if(_protocol == "TCP") { - int rr = ::recv(_descriptor, _buf, 99999, flags); + int rr = ::recv(_newDescriptor, _buf, 99999, flags); if(rr == -1) { throw NetworkException("recv", strerror(errno)); } else if(rr == 0) { diff --git a/ServerSocket.h b/ServerSocket.h index 17f9fb7..1583a3c 100644 --- a/ServerSocket.h +++ b/ServerSocket.h @@ -19,25 +19,12 @@ while(waitpid(-1, NULL, WNOHANG) > 0); /// \namespace NetSocketPP /// \brief A namespace for all library names namespace NetSocketPP { -/// \class LoopCondition -/// \brief A class controlling main server loop. -class ServerLoopCondition { -private: -bool _cond; -public: -ServerLoopCondition(bool state); ///< \brief A constructor with parameter. -///< \param state Initial state of the condition. -bool operator()(); ///< \brief An operator() returning boolean value controlling the loop. -///< \return Boolean for controlling the loop. -void setState(bool state); ///< \brief A function, that sets the condition state. -///< \param state A condition state. -}; /// \class ServerFunctionArgs /// \brief A class for storing server function arguments. class ServerFunctionArgs { private: std::string* _tab; - int _size; + unsigned int _size; public: ServerFunctionArgs(); ///< A constructor. ServerFunctionArgs(ServerFunctionArgs& sfa); ///< \brief A copy constructor. @@ -45,10 +32,10 @@ ServerFunctionArgs(ServerFunctionArgs& sfa); ///< \brief A copy constructor. ~ServerFunctionArgs(); ///< A destructor. void addArgument(std::string arg); ///< \brief Function adding an argument to the list. ///< \param arg An argument to be added, of type std::string. -std::string getArgument(int idx); ///< \brief Function returning the argument of given index number. +std::string getArgument(unsigned int idx); ///< \brief Function returning the argument of given index number. ///< \param idx Index of the argument. ///< \return The argument. -std::string operator[](int idx); ///< \brief Operator[] returning the argument of given index number. +std::string operator[](unsigned int idx); ///< \brief Operator[] returning the argument of given index number. ///< \param idx Index of the argument. ///< \return The argument. }; @@ -65,11 +52,12 @@ ServerSocket(std::string host, std::string service, std::string protocol); ///< ///< \param service Port or service that socket should be connected with. ///< \param protocol Socket protocol, TCP or UDP. ~ServerSocket(); ///< A destructor. -void startServer(ServerFunctionArgs functionOutput ,ServerFunctionArgs (*serverMain)(ServerFunctionArgs, ServerLoopCondition&, ServerSocket*), ServerFunctionArgs functionInput, ServerLoopCondition condition, int connectionLimit); ///< \brief A function that starts TCP server. +void startServer(ServerFunctionArgs& functionOutput ,ServerFunctionArgs& (*serverMain)(ServerFunctionArgs, ServerSocket*), ServerFunctionArgs functionInput, bool infinite, unsigned int iternum, int connectionLimit); ///< \brief A function that starts TCP server. ///< \param functionOutput A ServerFunctionArgs object that will store server function result. ///< \param serverMain An user-defined function, that returns ServerFunctionArgs object - results of the server function with arguments: ServerFunctionArgs object - arguments to the server function, reference to ServerLoopCondition object - an object controlling the main server loop, pointer to ServerSocket object - for passing socket information in that order. ///< \param functionInput A ServerFunctionArgs object with server function arguments. -///< \param condition A ServerLoopCondition object set to proper value. +///< \param infinite Determines if server loop should be infinite. +///< \param iternum Number of accept() iterations for non-infinite loops. ///< \param connectionLimit Maximum number of accepted connections. int send(std::string msg, int flags=0); ///< \brief A function that sends data through the socket. ///< \param msg A message/data to send, of type std::string. diff --git a/ServerSocket.o b/ServerSocket.o deleted file mode 100644 index f3553397836a49bc5f9a9f249b8c03891ddd88c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22240 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 diff --git a/SocketException.o b/SocketException.o deleted file mode 100644 index f0ba9ad7684164282dff29081425c48140a8bc86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7848 zcmcIpeQX>@6`%FSiD{c)N(wF^a1L!rNprOwyG;X);@Fq0m6PN8qYX*JdcEG*NA0`Q z-P*ZCm{P8-vIMuOR8^5Gp@IqosehDzpr9544j>Rh0i%-gFP6KVS^}L0_Wn&v!|$NE0&Z zZmGG~kgfqQ_G!JAcOI8-+h z?uMMD;o{OKRg_G3I{1SXEG{J~GZlF?v)&4RU&o;hpn7=gOiK%c%w#rYcP{` z&)>0QPol#1f9v$Ow^u9<477KJwo@h7%lnyJHnpnZgFQWa659{f>4CJA-0&i@ZXx+QV1O6W zGjOfL4(Ujh&4wpKJ;;;BIiNS-s^L5MMYFuF;hV^bKD>fVKzHE}>2j)io<|($&u~TP zd5iS?U2;LiVM}@%dZZ$>vl+_{NERv04}^9^vUqCRcgCRg3t>A+y@EI8Bz>>si{!ZD zJ0dw&EQ(|WP1;BMhx`XTx@SEdsacVna9uluY*07lfj};lmV($t6@Y^L@WZRtL1<4C z>sy1Ew2C%{*1(LBX0jRIb_xaOlnRm?oyxh+6vulX0nbh(ZF{0rvh!Y{n9Dj-8UK_$ z+a{83ZhG3wLf*1D-%CP~?kxI_`9PUVr`tftSR8*@~upc^u);z051}kzYoSFM{S(^5h-0Ozx%(CAB~VtM93qC zkI8ztI8Ca-cN#ca^`Fo!(4kle!?x-6aCFWLTg*S&pnSB1uzUxgeZ{6wc<1PVn$d0D z132o`*-0LCbJFGUp2+yMI7yz~ouor!6YVge>qOr3N|55j_;FpQ$B%V__I17cR6q~G z94Fn@7)(aVpI7o9<-*V>`vm8dys0^GQOR#7M%5;?@uy*|`-Cj7s`y870EF@5dY0@{ zUcLqx`mfvntFljgz#<90>^1ad7)9A{-Wsx5iW}{ttZsi1FquCs{)AH6s^qCjP)D^l zfiT9U+^x)7N}lY|gg$Nr`6&O7DE}#b^#8qZkv!pBKpy_;><_Hb{`+F==OgUncT~5( zi|lLpJF-Um$r$@*BJAV7N4Gzs?6<)jr%`1e_e`9CT@tmQQu3S!`-P~R0yxPLe^JS6 z;fs=zZ_@Y<( za@Le@iYWb@E1W+GjS;SpB|!Cs15@A=S5Kz+Ks^YEDJ!IQ>Vh2dELP`Dp%w{MNcPOS zrz~VJ>%NkNYelB?nUPNx`l*Uq@nQ2iT-#VZ(0Bhb;QBWQ`TrDy{}b>iJvT!NZe?|g zdnu$2z*`%td8YjLBhKn)d&n;EeG}ymt|O!HFT~)_$KV%Y@NdW9KLaq;(SB- ze>>D`l%IFT;P=Gf`vFJ0y8cOpr@=nbU11}hQFuY&xVJ=lEk^&3V(`Tn{OuV0S`7a0 z7Od8P*L1yqrIjR1a!ODqbv>;ouSm=A7Qm7KB6Y&%wLF=M+^PO)hFr}7>=BPVj`!Wxcx zfT^#(GIwWkMSILCdYygnxP>v=d`r-&Hui67ic%{6ADU`uQ=2|BB(3Ngs>16mH8Q#V4YYgZ4Y(j%TsGs|@jp3ZXm*G6mhZ)ZE{27H~gEq+jCm8=8hM!^l z_$(0rvkd2YUQjsJ?I#%jmze$s8LqZ-a%Y2EOVUs4O-vJ>g%QzO197YqB3h3io+J?3 zgz6)Huj=y#@%!N-z1;3@#z^zX{{X|Oi#Ucz`yP((r2%V^pPzvx)Ew&IyMRLsCmw`G z@dpU`RchrpBY#7T{VP|TVL0;B`t&)5BR`%+BfT0n75%hsy{zH1Zv8F8QBRv1FEbqN P(tfc8697d1Q{Mgq2QusM diff --git a/libnetsocketpp.so.0.1 b/libnetsocketpp.so.0.1 deleted file mode 100755 index dc1f6481d0d913e5825dd45a4fc3050c1c8e9832..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53649 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 +#include +#include +#include "NetSocket++/NetSocketPP.h" +using namespace std; + +int main() { +try { +NetSocketPP::HTTPClientSocket socket("phitherek.mooo.com", "http", "/"); +NetSocketPP::HTTPReply reply; +cout << "Sent request: " << endl << socket.getRequest() << endl << "Request end" << endl; +reply = socket.getReply(); +cout << "Read content: " << endl << reply.getContent() << endl; +return EXIT_SUCCESS; +} catch (NetSocketPP::NetworkException &exc) { + cerr << "Network exception in main function: " << exc.what() << endl; + return 2; + } catch (NetSocketPP::SocketException &exc) { + cerr << "Library exception in main function: " << exc.what() << endl; + return 1; + } +} diff --git a/tests/nstest b/tests/nstest deleted file mode 100755 index 3e085e9f8f74b4c35c1bc314f6da163376e14a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48120 zcmeHw4R}<=_4nOuE(8P;Eh-|_g`!1-m|#FaZ5Ls2g8?H+D1PoP$p)fHHcd7dR9>SC z$~L5;6{Xg{($-q*Cn_RZ4dFvVEv->O@uMXo;;vvpOO;wR@9&(MxnH}B{QuAMKF|9; z&wC+vW`1+#%$YN1&divkyu%yPz5f#=-ekxSuE<-s(bW!xEXC>!3wKel56rEFB zHMX{_Ytg2!H)=SrPcJ%9mdm{>|Zj_k3MB zf0S=$$>3E3rYXxF8n_c)m&eNzTGpG96e{sS|}^Hm1=t1|HaFa!S64E%qR0sk}upKu2J z^9=Z98Su3k@S8K(!zCH;A7#K-WZ?fqhW55((DUONaB`m>{5g;90MhkueFiz-%^>IX z8Ss@EaB`OE>U|{x{frEHn45uqVg|f#hI;EV&|jFL-rIo>*M@3qmIhg+ExXq3#@gOK#&J<%%>5o`qg@!-E&(&r&f$0~$GA9V27 zFrPI=t18bvo93_yS|BjLE>a(8iiR4afq)j6u`n<@Jin$X8g86g8)|9_H)(<5@|l6E zaHE9FXHKn+)Q8JM^J>E)FKtdkbU|Y{R28TU)mMgVQBP${C{W!P4hO<5mEneHO{886 zTu~pY!+BO&Q$vZbl46&XHI1)?IE}uANLGbPDG>Ryk!K`IF9A98L_Lw~1wO5iOU){a zPOOPE1?GjC!bQdPHBkd^np)^XNpK1kSNfXi;UPIf~q}Xl)bN6c$!42sH+xjiH)o6D0D@26ir5 zUsD-~K$YQ8U2$c3z*jatAesmc;rgoD;>u$yTOKGcK5EE@}t|YU-;a+|4YH(QOX%kfK)A!q_l8>cq%EYXNsKU70j8*XfjG-{QR`g-)UR#P922I`}c2CX{McpVC1 zSi$Or-lE}_nyA)6Lrs-dSsQ5zbA8c>7OJE%sL^;dY6}FY zRnisIg=*@xi>FQvoSR>uU0hOp(bT}W{Bil?wW)LGPPwQ!P?&$NfalHyNfA6v7XNc& zwF}o~NoN5eOyv+AoGW7@?uPRh`9wpsA}vB%N85AVxWW;1fEcieR-fh7LS@2yJJlBHvSa3CWQ+C3FA8(;QWWlZLmLnGYdlq^v7UUG^=Eocp zr<_=jBZQyGF>%U^1vx_aNgNZWA+aDw2tS!);^c`1IYRg;922Keu^>kXAIdRtDu@L+ zLinj16Q_x>AV&xv#xZg7#)2Fn{QDdeCx0x+5yDU7m^hWjf*c{7uJP0{Hx}e5;U12O zQ!p0f2;svyCQb`tL5>hUf@9*;5DRjI@E>qYoLXW*ju1YQW8%~r3vz_;GdLzr%VI%} z5Pl}d#A!t=$PvPS$T4wR6$^5NaJ4ogV0A1=fkyaQ922KUVnL1&KAL0Vv?dnh2;paQ zOq|xof*c`y49CQ&GZy3s;rSdBr){wyM+iTMW8%~u3vz_;0*;B(u2_&Ggcov5oO)tG zju1YMW8##E1vx@E?MJBNP%Ow%!s!}S9YW34np|x_h6`a10(&Pe@t(?A#(&YM*4V?ZNrH4>D z$mv@tO)fB5%IO;@O|CEL<#Z#Z$>k*rIDIXphf&(Y>3NhU7njWA^c9pQ*Ot^cJ)6?x z(vpY1q4v+9w1?6?oW6+C zhSKCRl505qD5c3&Bv*6#H*~$x!H*rl;j1@LR&P)4>8*sVr<9`Kc*G5Qe|(dF<0n7%ySn}Ht^U`)ZASSQ ziPpdLji@TWN0x8Ba3lIhYd*dLB@_P(3cPx&{v;sRKR1&+{@8`x^Fa_j)ezzMiVgl& zNEiR8xBKekjVO{_h*R|nVo~P5(7!8cN8`H^ z`4&Fopk%6q@RKY83>Ekq!oU3w)3D@O0`Kv+uN17`B8rZ_n%40Uq}V_!=fulgprXeg z=iDd3w}ZA&h;+DOfcWn~_ebsnQ_zE872lQoGxbb-Gc}J&-3ZG4Co^C)=@n4!N7oV& z>!e!9&uy8Jroi2n0<7inq5wDYlr#k@Ed{vs*;F9DYyT)wD;n69==lnw2{8=OMx!9n z;nbCQjSAheh5G->t2dK5VEW37FaA2-d?dE`Ygh9RZ&`e#w-@Gi+J<4bL4Du;ySMj6 z?~d^JBV}xm}!YMWSB5Wn0ox9DHT)7$<9`>=3ZWaJb(N-nr-~? zm2)|0r@6-8wv_X9x*{R@4x(}c%#q-`R*<%5Ep< zX^e_`yIPMR)k5P6)^6c{ZsfOeS7Sfj_sVjw)r|xw`+P?H= zZfsZLOmr#il#}gC8>p^M$>2t)*g`o5+C`E{HcFChUy@o@vdTo3H0RS%b^}eNiI0d2 z+22Yk>2LS7N|IV?Jtw#NwWEvUt1{3ncF7HgC?-&fF!Wn+-!q z>T{ITz6Yt8Mr}7p0kAyrjc_6l`rCag{PDjMS+Qu+QxyLTacHl23fZeW-jezn#RL^A z2qYJamK9Iob|cx9c!3(w?&I<=3tnK|mH4&5S(M)afAR4Ebkndv=;lMB6vFx2ybb=i zZ`b}Q{x;vPw$cF{_|Z(HyxH-;g4swWUrF{I&ywZZwAhi}=AlFe78tn*V~clbxhp%D zbT&V`-?c&{mp*G~Xdtm+zp{Zu{5z6~cOYk*hEypD%<9>I_P}?rdPa+8yiN2^Qt|eR zw~^i1u}7+>9}`r-Hx53HMupWh~Vw^z;HP68!OZ!FvvCOL&8}ie3JADH$IbyfG$Mp)AH^zT((k znk}Pk+LZOQ9`?sye~|`X2Mty*z4Kodkyfzh5InijZzn#pioAk-kg{ng$sF~2*R5y$9-8!j`H*8A%~mVmAHVKa?2K)Dz2Pz)s(Bn zv{Z(93FBiiv_WeJ-$4@o0}`hVvv9kA0F3$|k0W986NsTC`-G|;Dh3Ugd&jKpuYv`J z-Ih_90eMA)YL0-_kv7e&dkDY;K>X2A?@FxvC)b_eao6&>NcasURLg9?t{Pu%Aga+9 z0ogx`6$QRV(X$EWNt>!O$`7`~ipe)rH5o})B8%D*+cLz~j(GDSheIWx4JA>S&0 z`^?oa3OKc9w)7|sUb&jwMl{mMUlMUt(v?^v%C>eKk)E*#4rd8wD7rZZ`Bzczx0U9p zsK3n*hvr+=roq*sya(-y`wqkwALz|pT81)WR=XUqFu&bY%V_ju;tXJHJNHwa?6Y@6 zq;Bc67YeEN6a80IyuD&SvU@tdmXcL4K?RM49_h0eVjDsvyAt~jaSOTpCxRDPcP0KR zaF*i@;C7##X9&tF`!$HwDs~N(USR=PVK);yVSP(bRyY>O)0GG_sQ_4tDvK0;OD2nQ zF=fINMi82g1^Nc3MPgw~QPMA_#4Qc*48m;1$})DK1-1j5X>N_Lyor`2ZN6nXOK zgT*~{<+pGw$ZqBK9HeToauLZ7{y|Bajh3}(ZOkbCx|omFLE^aY{n+C7(X-}kEZR@2 z{0E6&Da21)0#feTP0Zc7Sh=52>9#$r6S-K)uJ&rgkXU2P!>P}_V?ZUdorn+g=4s#)MBB&C1z*u#+a~-6*4QLZ=j~6l_ z(L|o7K4LY`C(Yy@YuDbsK!TMys zz8;3vn_O+5iWj4-n8;6SO5#0KVF?;ynUKd?if}{62!1SR zo+Xo|&6WJlGx>c@P;5(!oIH6(6IWj(xj+8$T(lzoTse;tv4-cV#~3JHEV{`SUSV4h z6zyw3 zzg=EGa9=l5o_W3W1+lVUFAbKRehE{qm-JT6Y->S#bw!thK`<#e19?3;$3c2p$B%iVh`z z8x!zM2cu!hAIEMM(Gb&Nmhv8!Sq#H$fpf*Af4j8PfwcJ!B#)TgCjFrr@|R$&#qPE@NVnoyRe{uZZ#qn*X6?_hf;=V*|al$sxuOvZPNl#IG#z3;f4}q}> zJn#u+(m>}cHaXB+2$lO$UvoR%hhG(3KPG}%g5YBm=9$s)df~R%N*9`?gsC?R;af>5ms>LLAYiWK z*J|?f8T`V`qE}--|W_lu}PdC$EO6SUS$6PtE|FPE;zyRMd z!8`-pVuC{q@F^4Y7~p*p?DEo04qE5}a5Gxa z4D*sL*2!(HbbzdoSq_l3Hpv09YDYRi)<5aXS`l~BSCGmCq17bGE>`9LfB{&q3C$jl zH}|k6Kp+3mR66y_A~Vgk)|hD)?Q%2C@)w(FZsa60&6+sNOtZR9QRy~gAATXpDLN*{ zQ1=IW4AAWN?IvjU`|~Df_WN%nn5o}yH4B;jUT1=4zt07juHReH5L5HA->-9ktdcnn zko7jj0kU$(I6&@!lN})UdzKAEzkNosi+=xtOu(`iVD>wdY$&+(14F^4)~_=`Q|og~ z(A4@A6Ew9xMuM5NKENzwYW>R|Ll9Hzdn_QCx5}jt{cee!3NzdE5$DB@y>cZ zqTWSBz6s>qUe)t-QAVcT3bRB8FSJjG%HfgddTO=dWNr|uW`cZFVXyRlh zz649!m6-o7;t=6APzalhmyV)LLn%AoVd~BfWeZyX>_5}4n^qJzjBmAYQ3pgpCsG<8d zE`?C<)%G^L1R2f##VvO#q8k0$E;RZ&dx17l09`Dtf1;@LpG5m(F0KY~SkyS$&R~X< zfmbki1`NpKwp}gTi0dCxrqP3g{>^=|hE&^3IS`fNHPqavsJU!hJokoC31(_GQ33NT zI}7msdI7M(UnuDIPqAFQo&tVqkCCly2ovp2co7=g<$;4&9%HunmYi^NoribQ)NcBOq(*5L=#KBCrfqCR9r{jckA?bN2erCO=pCi*8>Y%uU@8C4x4x?-6D`!Qd?&Tn zLVfSisBO32>g<&CR1WV_#9u!0E#!+ocZh?P2@cwOC@{BSBh-ubZCLkwFHEf~v4t6n za(t7UJLKD))aaGWls7aPO)$EYYiw`l4cd0v0Hs@hU5QUK6dI@UF1bE*L2WU9ihLoJXvULkBIqfT$Q`=Hjj_?%^ zTUw-3cEOA|bhRk`$KxiM@x;`6-n25d2rsu)BR08cAC{{*!s`vX2P5ejy+`yT zi12(M)zB_C?2Y@jJBTSi9Jo~DF6DB5>OkqQPB10&x3AzXZkM#Imus@&aaCt43;2v~ zX-d#2RBBf6;MZopVK&16VkbMf4L(n~J~)n*WU$y(H#b|!$=$N}0Nn=3eE_q1^SiPx zLv@RJV?&zy3aP7ZsjKa@Msf%zml|&;uK$Xg4qDi;P2-~Jbl;bC^!|T{5L+qj{D6!^ zN0OEB&Ec-Zt~V$ybGs71q-1;(ZMRI?Bv&IRl1faHheZj|6L><3yTLGkWynp=rga2Q za4Sf}C@?j>v=UHh0>+rV)Pmj2ozRuIgxV&qVZGGD%yKnx7!GQhGwJCU0ki$|Cnk*o z=p?#-zYZY8fV79ML|;g}f2JT}749IS!2;-^Qkw}7^P!=cr!1IiJKYgfbU`We?VwYW ztm;4>_Qd#FgNf4^8x2-62h=}jHDZ?SN=zY5+_Hs?#CV1yWlj->Z%$%Yu?^7#nSM5v z&dQkdYP(ShPpFDM{hsou+pwpc3u3XSOi8h)d_J)6*i$yv4KP5y`F|euBt61_8>xmD zyo)4}1k<52HPX(YAy(N9+HO1&E!VRsD6DFx%Fwm=a8|4;azm$|I940UWs+)$$@&K znI#q{vCbhfD`;kkl}N19BeQ%ms}0u)kdZDI=y{&@QnBQ~{X7Uj03*M$=p zFM$gWVARr;SmFR7Bkq?tK(whVafJhf4!ROP2gv(-1vU^=rvs2iI+E;F?C7e2Yc7Os zW_UA}^07lMwPMCPHGXKB?=V_)BzIlK;bnPhy?WFfL5@e@Y|q5`yPzJLw0uXpyjaC( z@)@})KbbN|J&Qx5e?6A-Ye0oRdJCfYRK(Yth1bi%$^QsuYuea&*7KvmzV&!6xTLbD zxP974mw#gqd~{c$;?Jas%_Z?4l(b)$Gc$gWa&d=m>;AlwcyD6stGL}4>&hvP{lirp z`?gp3f{*;|WpptCY4W;!+ezI0=SivBDz^J8-|%nTDtUm2cm8+R1TsBg*R&{K|6u9*@@^R%H<6Y5R~MMmdX;xj~Cj4kLn zmOx`Q)>!*6JYy^hP1+nCxg551F_-45Q z)+xFOlQ7?pzLVsm+tu`-;i&mu_`$Bkfo%jD4;fyL7wbf_D{+g+;<8J@%Dw@%nV8cY zj&Wt}JYc)z*y`y*%gz-$9X(XpIpC;vI+$%fOSn5R2cc~CsX~i1TNfC+71$Sm0~Y%N zao(di!dn$H56MSLKBNm-p3p2hYCw@y@Kh@@JaOuUeAwBrK5;r$Kr5gF^dV1kLm9$0 zvg3)m8BEFg${3B7ewc|pm?oC(%(=O>TK5_b2C`>$Y>asp@`Z2NP zh4gN!Wj&}8&jRCTZbow^J#(`gB6UjzWfLk_W6QW>0&wjht~;pyCn2BxiBoee1pnIBN{e;S zE!+aJ$l)Ts4a+L=Sce3jr*)Q)`5J1k<-V+VGOv@|n0PV|J20huk+IUxLAw{hv}H?w zOhLSTB7ySxEb-XhblE*|2#wv;MPh4vAKJ?XU_5%ambGDh(ypUa7VSsG>T;bQPin&J zw+4dud8l>m2CH9!-agjfCJsU@dODD#jK2j{+>C<81JSRbmEyrbzaibt)E*F?1nCmT z17-_dM)lECVJkUbJ;TR4rdP2nzB{N?5AkW258OQ_TXQ}WSYCVL7F|A&O|_MZ{b@55 z6DSHRTtJRPFARL%J zBo!5t`!8EJ(3{SQhfy!y1(Nsr4uD?t<7reK599|)@`Eg`c=@U08QI_&qB$$%EsE!J zxur;UC3bJ(mU7t-L1yo@;g+_vuSoysA7(p#wEa2I#xYrP3*urULnOo)AmJ?!Mpu(e zEca6+$9X877zd2I_YWjh%0quKA?pUB?o z?Q=P2<&QbQn<;HeY1sBsgokk(&-8LZA)VYwUnp)^dm&D*d9^QP7HIlShj{{6T8RlO zIR=KnF3#9`8Hm=%8PXV!{iwBA-4!B~ljIkO3g5^U|2Ep8=2ad!Z?RGgvwz;qUwSj- zr#^U=NWhi!C%LXRxUzNKVwMsQ{k6&>kC;X3j3V4gvn)lpr)E+Sx%F6R$>i=Tko@MF z{Jsxo?4u=HUmS0ce!{+f9VZXUR2Ij(k7h z&vF=C$pjU&0)c(AbGr#wVoHezNJv@!kl@9gwL{Ug=FFoShMQpa~-6*4QMMY zi&Zy8G?5>he}#&x7ahB$>O4$fdp}@GUshcw)$ufmD&G%yPVfS2T>lH4<@hh)cGbNH z1WQ`=(Cup2pBQ=UeXd4XHS*Y|uM&*8PrQ~)?wB7_CdM4KPmZ}UXo%p)G7hv9;f4+n z{8-RKFPW9Gvqu1I2^&H`#*y{eWTcRDL-jq`V)H_@iYRV7?zP zg{8yd&+ufq5H8UlF!%B;Xild011c!byfO6_v9c`}I^LF@el}C4c|TyfPF-*Kz-J+( zh2vULL9mx(!25n8HzJewAlGgNJAgRf4+s(uwqbUD+#<;;9N23-!AQ$piKXMfEx0Xu)3yhKF0S0 z()7Rc{eU+hMLhNWfb*$+=2Bq*Bun%K#wPH;s1+$og}I__8>pS{Q*r4BI{NUt*;sEd zfo-Wk-}Qu^c${o|fpx~^w+mi8Sl0-g$LU(&cAb3=B<6TOK*(pjA8@G82JAwUj?iNXxDuOW>~&O`jBLrxB(7{Q&BtqrV^U z)Oy2#EWKHp`eR&;u>e_aAyK1Y8Ii!vkp86GYDV?KZLz1DW0n%8S|NmIQ=MeVWP6<` z`2|gWXBhmr2m4rxa5w6LA9rK&d7~BLrTzq{NxnRj-%dn@e5~VjmLl9y&ruP%VEd&d zleN7{^6Nw>+q;zNzhw(~e{=O=dxiqs4pLX0O_a1R(!Pubjs5+A#i&bB7J|L){QwWw zi`|p1#EF87^PWZedpTon!@ZoT>tN9QegGxKy_^WJquk4(r!By7#fxM(d`oi!i~{Rr z2#NJF?}L6Q_nB2&aS4nk%j0+)L|*;o(!is5msU!{lcIcMq$`p49IJxTdDJLPrNzAj zu;ClKms7K;SbHh1p=kGr;fqK;)5vuQmdxT)u(0mcV>1!!9UBPXOSD@q8@H3f#f=}! z&JcLX_r2{>cMOpp#<$iK-2e+LAk`aG?UC&*RcYi!Ap$>|8S8Q3J7Kll2;et?$Np=` zG~;ht8#b8Q(8q>z+rB1xD-Iq*z?<#zU4QJW-YC=UZP>#pQ;Q~8RUgq?n2_=qU z|0=%M)EhmHSLHmJ_eJ$(r*7_K~CJ91Y^ylP~RzkO`rRF78De#Q_4{`gfRyGxLn zD2Yc$9x937H1Y^M%fyniKAIB8RQrX0<2U%=$qWB{EKPv z-YLC<-}lEhyZn>(H-F-9yJ{qEX4Q_&D`~45Iiv(JPf1&J+EZLQ z*~66LMD!KYO7X)ajge@iGE(cQk3>D!)km(c2c7jJ%kl%xma-J3^6E3r{EcQ}MiG2G znZLX&>1T)QBGIr18J-29CJ%pPxyl0xJ+d^u*PL&Do7t?Tx~8!yir*9oBlD;D{5ZbN zJPn`G)@Fx)+8joEqBV60LUj$A87m7nE(|w93=XD7>hU@0=-3ke)HuHHtO23#PSYo% zsdh>;MLE8Ot>Jsr04YsEs4P*~Q`5xy33=+9>*j?UhpV;|D^kV9zH*P|@t2pEo>Q1# z(4SQfJ@z-+Q(RvaZt>u=+xCaCQqck zc9G|LbgKtd4fj+ug*~KcvZj z?Olub7&xIN2!}k?+xs=bAHso-#8R~i;WUIdA*@2!f%W0t2uEYJ`4Ym(2;WEeIl^pQ zho6px_%wu9A*3G``YFPZ2=7O@1mRn_;(Hw7*H{L;kFXqD+u6FNZ9+H(VK2fGgoAO% z;BJI{aEIt6gx})&doRL6*lrnsmyrtI?CmW=xC-G_2)81<3E^Rc_ahv!1LY8wB77g= zJcM5(T!C;HHn}X8peIY!Aa4*8K|3N?Ercw#QkqGH2%o2q3AzC_IH_X;tEqSg}2lUNZ z;p&@5IDI5`^<%xgqlrKs>FLF{r-{D%_r1NVVQ<=?yy=66%*Z|N`kYqn$3xE_eeTE+ z#DZw(aNST^!Zr4F(@%D|MZJR0NaPQG9M9^*&a)3J^lDQE<=vJwbzmQV%Vhp|`gl@$5G(bfoVpvz>Q??&qM()K2oBk0C!(JE{EPop@i9>e=n6=Os}O z$@3EETEOQsv^V=pJDvMu7ZVcQUeH~Hdm&#E-8qX)eL!yarzYJ1=<5XB%VU1?9ds6c zMWA~hewUtL%l@5(PV_@jj?~xvpgW9P9}6IZVRxjfYeX9ert!B0bVay-l*z94BLAYJ zm`*e)C3eZ-KSG>r8oQ9)9L1`D>AX<6FJGqpamC&GI`W|4ifO zF!DEmf4cEQ@(qUnq;CtIZRKBW@~3scNYu~2)1drRxtU*%e0p;xQ+^crLy(`zUhYPI zf8=|t^z-(i%e|l<`8L)QR(>>&ZWTNU zCcfK2w+wX85#IwD`2N=9OY56K?+Cle&c4y?Zyv{43F6N7k9EqspgYG}|FxoSvae~# z{{;E$mxnp|2)|5pwV?YN>!F#5XJ2cfqqa;n`O(*$M_`>4KtE^SV4)NKxRflG+Dq%N zE3gh?KmUb=E`y&x0DAfc3H$l;ZZg~J@biN)9_ZUT?B}1d(2<;$aY^@$w}LK{o!*c9 z50RhAPG3TP(WmM2NncccFUoh3zFu<3@v^C}EudTS3H&zE?Xb{^e*B0isUK+_Nncnx z6LG`Og-kxQ-YiG{H^k>i3ZKsupD5_g!uZP6?z@psU(ia|ZfX~mFGv3ERL`)*Wk0^Pvv5xgZkD1!Fm*heIKH}p~;q$KIQvyEO|H#}fT1O8@ zex`OUN4^L7anz&DxUJ7}y?T&0*0(+T=k7bQvgQs#H}U#*E$Ehk4%4#j=Me_ zYsET#e(+j-cb2x)rQ;jCce-@^j@=(zI%2UHBe*Dx%zbNN)bQl41Jz$n_y)~&ynqy5XhNYkFx^>_MdJ9Pb}e%i;n{#ZZl55(+) zKKdW}Yq$2*VFWAt>i_Adz16>%3-?}LNl#AdF7g6kS=|}o&kn->SwL7!+xNvzJ&(`nh zr>)E$h4{{F{fYkCew_PhUuK_*_-}Q+qo4MauD{k#drhDG%l_KlJ|mW5H1yR!?5922 zm*RixOJgP3cQE3=%F#jdXb$mtAx8(#JE=2Q947=VI33|+{qroXLjPNq)}U|8B1?WY zOIz#GAIQ>PbLsIc?Gu-N*rnYrl|8r$WnvKDrTvXNoh`1{HP{P0pku|p&PA6~zgF~@ z>3CoysIPTtKXZ-3WxF(zV;WC1ZjNa@4LC&~qn!Z>rr-~z)G`wxjOC9x+I=ql_c_|D zRPA$F`kno>x3cula;*1G^_>+AYyt$HCYf%@q8_Sc^3qkq*;+tf!- z_S2U1orIM{-w`js!_dHZk4{gMF89)DEsc)9$|3Uq{@5lBe(yZ}VV8EXey2;jX4p;I zA4z{&ulxJ1!J~)%%;mmR|BcHX&|h@9-*XMrw3{_;v78Zz=ESr0U%A|~COzkJV+MH5 z<=*SUCA>)l{sYd{tF;;WW!jBk-0MEkHE^^Zc2Cw9yC1MKH|XnK z?!VaC+2*4EpZNb8_`g8|4MV&vMq;Q4dq#*bmM_A$r-|^l*NE`jkO-fy5@D$G zl@Dj=!5#x03a8(&w5I7dE9n>@0`1WEyd1-*<)bR>SIE7MAj zLoz)|=8Mw*=g*~5|IV7u9PDLif()n2aE=VCWw=m=x5@Ax89pq-bu!#4!?$F(PljK} zu+NF2zLR8lrVJ;@aJmfV$go<53uSnl4DXTQ!!lea!>uxWONRSo_=ODnoFwa);h8d= zAj9c0oFl_(87`FJZ8E$^h7Zedoea0i@GTkcli?RK>~pfLUxsJOaDoh{%W#eit7W)Q zhPTP^9vMC?L+(V&2|uMf*)!_mSrun_it^9P$M=Ktn-Ay zL;!h>;o1-tkgVH2 z&twN6K7I?Fc?3d@jiE(?hl*cYiGrvvR991pauHO4Q$E)#>X_Hmq|vSXI(c{6qPYKI zl>8p~QsrN?EH6?xB%u7B08PKE(mz0ie2pqUEX#`&_KPLp;gorj?#}?Q{Du7UisHia>8073Dx|f=u}Ael*o6h zwDR9;WcdbJp5!MvmHZOcZa{=|s>-YR!ZS!vsQE(Guga_TlYG|lYW`Uz%d7c{%F~?e zEdO(0q!Tq?s`>iR_WTG(+QYGy&y)U|Z$u(*H8t9D@VzypRd_ez*79ql zUs`jrD71E_rLd)(LhnPwT3)R$s=|Uo&9jQ0bY(qOBSGbr{#)hxq*a!8ISP0{Yds!8 z!diYwjhC~R)Cj6t#aJY{uVj>ibvRqgAG*%V_#rYZ9AB%2i%1&%CzDzyBG&SB+m((3 z3pvmhtBw`Pl=|NQPNrgXQ)^IAwu-8(K^;BzYnDf(9BRY-fl*79n- zI9HbMp-ju6%Bipq@~!13E(tRA#3iDTl2frz{Lkks%|Uk<+A>vicn@clH7L35Mj!R?V>=>Ng_NA!EF4g_ACEK<2zmb zLmm?4dZZr_DWPi>|E|zY(q(y5$lNe0HP2cz-H=4hpLRUkxK6R-I_5dA72>!X7Omzn zYo;4BwVI#oc#fv#9XsAnQ}c-(@2{zO!j2zjT(8;j0h;pbc6^|w{Iwk)q$xja$8$C1 zU+s9Fru?QIKVDP*(2kz~|K_zq9CvG&w50#AX1Z}VLHQ*+exj!QjU7M9@FRBoWcY=k z72>#C8)951S~K1Fg?lxg?f6hljZ-_Wu7XXJ#!I&LS+9whv2-|%k90Uq=PoU^y&m9M z+CZ(xaXm0z;(0^7h?$2UQKEP57tlJ&h1J54+k#B2#(5p%srsjRpZKVK3oeAyYW%s< z^y3EL>Du)w(+|~#IqH1}IPrgMs24HwH{tuykOr>yNlxTkP5VA@d|gjlBjw&V=~lReT}`|v%!b@SM75->&;tWuea(u z>Mh7n@5Ye5-bJ!rwXf!^ccP=-XTGCedR(3ksF4q4&(SI`rzpB{os)RpJXr2zit~XE82?vjibYzk05qr)Ns&xLxAI9R2ci z20q(>kAOVS_`F`_4bz%ciQ1eeMP+wJM?xTd5)xCdx4kX z1v2wi##7g6%QEnJ0{C#uk6!6dls&&G`QIb;ulDt`;b=%dd!>KwlJ({Tr+)m`2rna} zC0@z&GGPgB&4Ax6`QPNIw?pDi|FBQuPCGdP7Z4=RcAuAPJuK@U51iy5Geh9ZC4LR# zGGPf?B>mcXUPjl-yazJSug`#YOFrvmz4VM49eRHu&nDSk52M(fWn3mK!6g#+p6Iop zc)tU<$A*XmJ(EN2z3)d}2Iv_`I@V|4{|)ftVGn9O4>!Wc0Bq)^8%ICLfM3Ws)`7C# zvm~F8#GUrjCUIxKKPPeZzRH=B&-=j1ZnYXOBcmkl!e*F9#;w7r!1L0~Bcp(mex8(m zSY4OTl=!NAFSAkeMJ;f$tHJXGuIA-dN$=G2;}Rbu>2GIlcn)0RLrVo8de)DQ=>ya2 z`3lAdYV+j0c8(y|V!%lc>irmX{rrfeA1w7hR?_ceTqZ2RK}oOP5Bf~zorFy!(vMRQ zOGs`lKu)w@0@>cmG}&Ye|wy9iy$((9r*ECr)d5qL0jgo4D?4b;DcZy$78-; zE&0&TjMH%jaOy|;{1zQ&^BL<7;OXrAvJ7|=@rRsVhn%fUKTvCNwD++Ld^Sn??kX=! z5|{G4k%4}12K?WWk9MlyL+?`1@qHLJ_2U(1csZ@+FCXI!*-lqv!0Un2`e)73Ak!ns z$MOvHj{?sFy|W+JG5tW}eJ_oJ0<_QlK=6TKuP{1S9=+$m-qz6Wx^8NA?cm# zt0#d|zdP3(uV>)%h2*ow?`7^t^5KDzq_dOB8SoOu2Wl5N#$z*ZlIOrQFZ10h*lYJ@ z;Ilph{*L57S@J26eEMR8fX1nMpKpZ3#{wsPI@dX+j7uU*PzBs$Nvmj+ zHrg!`w}D8k%z*zMIL(93@%SXu57g>Q1pmX5;U0-!B*Cz;Pc?S8rcmMbsVo@G3BpY{bw@0^!4x?!GQsZ};co1)Ft)rbZH zGp5cCloXeh2LjlqZ4A$^X~KQ{K(sD^*TU<=O?cBg1quYJB7ym}k$Iuo0NyQcYzl;$ zTk!UET|;d+8m`Kpa9-gga85%MpxgA~7JC4<%^MeK;x>I%b6wpc6tScNB&?0J9+EXd z{)PrEa79_PWMUvt6Co-jiwXk)yrvzkspN7sq1u`okc!j?@H%#&3gsG``6cr}K~0So zxVYrfi>8#INb|fvaiA_#Qx6_jloW#H{OE$laHuK}0{OylpkbkJTtO;|#}$lMn1w`k zmVqnmFF8*#sHcwel{L{nZE9@|bRb?HJ{BH@;0{ne%mQ<^|iDK6}bc zU%)qO8Z2Fyy^PDAyL9^WGGBS1e9A>7KBBPMUzHu;F9K+RX_wEMGP8IpY{%Z)j-D!1 zJx&jfkeN1;$=ZvU9a4BMzVra4%C91zcbv3^bk)W<)BVz}ig{b9EqySXWy z*_A(0n9TI%dUk_T8s|5`aAubkkg3nFgQH}-q_Ht$VPLj&`crE|O-+~tAo3+;P2(#; z)R@}Qct|Rx@9nkQ40al9B}EAiRnd1Z&^@HAs@l?2)3UL*C~$%pJM_g6@s*G?Rhi^z zB{8!nftgSnxFAm5UQ=HkIeMp?HHC|cF@>cY zKjm{A-JIq_8BSX&Oy`&)P4An%N ziYt9(A)I{kW?xb^uNV%qAW&Wy!00SHmu!iLpRgsGSM9o@5nxABS_R;8YkQAn2r-mH+K@@BHj^W^(qJ$j=DqBJU^ioTW!>6J9$m>KJ z9Qd(_R#*rd#At7(#}wHFkD)y<0Un`f$%I<|QcvojPcdO?grnWXB1?9laTJWZN~jaUn$T2)%Jrv+82qMS>tX$4$$ zio0-HnNJH)hotY0z|qzw#$&b09_9nOJ8HLNiMrGR9hQpt`D~~ z;5%mFDz6voW;_5ND9k?>^I=s}MDjUWzm7w{maDI)sa}P}I2Tst>Xt8jL(xc$y;YUs z!od!v7?d%fGk1-BQCVax$gamCprHn>qsA23D|vD8>rb@YNAmhP8Jb z1I=!>bREWB!Lv`sbx@i)h!;h^vhxBk$9ctNMFC7mv__JRG%l+ggTd&PwChrPhgg>k zwXDRje6xYA^k|Jt=i(}BrP0yoNu3s{_Z>atP@QEY7nnXuFtxcCG@~rqSRTQtrhdM! z6njv#95(HQy3?U3UK!EUe5_4OnOG)5Cf@E~iBddTif2r9!gkw`HdhsLUYj(??W4+2 zePy^dWyq&ad4;4d`2j`Q2Nq>ud}1!;_JeWcdb|0eS6F+I+9u3mv&$l7P8*{IcXeY# zxe;S%IxNrF4I0m1bxhN3={B&OZpCh)#_+M%l{$RI^5r|I_^KpDou<_xAA=3+^=f=c z&~B=5-r>52=%UoU0*4K!TOEiFzyh=g%C1d!HI!} #include -#include "../NetSocketPP.h" +#include "NetSocket++/NetSocketPP.h" using namespace std; int main() { diff --git a/tests/tcpclitest.cpp b/tests/tcpclitest.cpp new file mode 100644 index 0000000..ab28a66 --- /dev/null +++ b/tests/tcpclitest.cpp @@ -0,0 +1,24 @@ +#include +#include +#include +#include "NetSocket++/NetSocketPP.h" +using namespace std; + +int main() { +cout << "Message to send to server: " << endl; +string msg; +cin >> msg; +try { +NetSocketPP::ClientSocket socket("127.0.0.1", "3490", "TCP"); +socket.recv(0); +cout << "Server said: " << socket.get() << endl; +socket.send(msg, 0); +return EXIT_SUCCESS; +} catch (NetSocketPP::NetworkException &exc) { + cerr << "Network exception in main function: " << exc.what() << endl; + return 2; + } catch (NetSocketPP::SocketException &exc) { + cerr << "Library exception in main function: " << exc.what() << endl; + return 1; + } +} diff --git a/tests/tcpsrvtest.cpp b/tests/tcpsrvtest.cpp new file mode 100644 index 0000000..8876fcd --- /dev/null +++ b/tests/tcpsrvtest.cpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include "NetSocket++/NetSocketPP.h" +using namespace std; + +NetSocketPP::ServerFunctionArgs& serverMain(NetSocketPP::ServerFunctionArgs args, NetSocketPP::ServerSocket* sck) { + static NetSocketPP::ServerFunctionArgs ret; + try { + sck->send(args[0], 0); + sck->recv(0); + ret.addArgument(sck->get()); + } catch (NetSocketPP::NetworkException &exc) { + cerr << "Network exception in server function: " << exc.what() << endl; + ret.addArgument("exception"); + } catch (NetSocketPP::SocketException &exc) { + cerr << "Library exception in server function: " << exc.what() << endl; + ret.addArgument("exception"); + } + return ret; +} + +int main() { +cout << "Server message: " << endl; +string msg; +cin >> msg; +try { +NetSocketPP::ServerSocket socket("0.0.0.0", "3490", "TCP"); +NetSocketPP::ServerFunctionArgs args; +NetSocketPP::ServerFunctionArgs ret; +args.addArgument(msg); +socket.startServer(ret, serverMain, args, false, 1, 5); +cout << "Server function returned: " << ret[0] << endl; +return EXIT_SUCCESS; +} catch (NetSocketPP::NetworkException &exc) { + cerr << "Network exception in main function: " << exc.what() << endl; + return 2; + } catch (NetSocketPP::SocketException &exc) { + cerr << "Library exception in main function: " << exc.what() << endl; + return 1; + } +} diff --git a/tests/udprecvtest.cpp b/tests/udprecvtest.cpp new file mode 100644 index 0000000..52965f2 --- /dev/null +++ b/tests/udprecvtest.cpp @@ -0,0 +1,20 @@ +#include +#include +#include +#include "NetSocket++/NetSocketPP.h" +using namespace std; + +int main() { +try { +NetSocketPP::ServerSocket socket("127.0.0.1", "4950", "UDP"); +socket.recv(0); +cout << "Receiver got: " << socket.get() << endl; +return EXIT_SUCCESS; +} catch (NetSocketPP::NetworkException &exc) { + cerr << "Network exception in main function: " << exc.what() << endl; + return 2; + } catch (NetSocketPP::SocketException &exc) { + cerr << "Library exception in main function: " << exc.what() << endl; + return 1; + } +} diff --git a/tests/udpsendtest.cpp b/tests/udpsendtest.cpp new file mode 100644 index 0000000..e4fa132 --- /dev/null +++ b/tests/udpsendtest.cpp @@ -0,0 +1,22 @@ +#include +#include +#include +#include "NetSocket++/NetSocketPP.h" +using namespace std; + +int main() { +cout << "Message to send to receiver: " << endl; +string msg; +cin >> msg; +try { +NetSocketPP::ClientSocket socket("127.0.0.1", "4950", "UDP"); +socket.send(msg, 0); +return EXIT_SUCCESS; +} catch (NetSocketPP::NetworkException &exc) { + cerr << "Network exception in main function: " << exc.what() << endl; + return 2; + } catch (NetSocketPP::SocketException &exc) { + cerr << "Library exception in main function: " << exc.what() << endl; + return 1; + } +}