From 5e34f3d750c6f44957e4e4162be4161b5cf9fe62 Mon Sep 17 00:00:00 2001 From: JAJames Date: Tue, 8 Mar 2016 21:54:57 -0500 Subject: [PATCH] added some '_alloc' versions of 'Socket::resolveHostname' which do NOT use a static memory buffer. --- Jupiter/Socket.cpp | 21 +++++++++++++++++++++ Jupiter/Socket.h | 4 ++++ Release/Jupiter.lib | Bin 300880 -> 302102 bytes 3 files changed, 25 insertions(+) diff --git a/Jupiter/Socket.cpp b/Jupiter/Socket.cpp index 7a25404..fb5eac5 100644 --- a/Jupiter/Socket.cpp +++ b/Jupiter/Socket.cpp @@ -324,6 +324,13 @@ char *Jupiter::Socket::resolveAddress(const char *hostname, unsigned int result) char *Jupiter::Socket::resolveHostname(addrinfo *addr) // static { static char resolved[NI_MAXHOST]; + getnameinfo(addr->ai_addr, addr->ai_addrlen, resolved, sizeof(resolved), 0, 0, 0); + return resolved; +} + +char *Jupiter::Socket::resolveHostname_alloc(addrinfo *addr) // static +{ + char *resolved = new char[NI_MAXHOST]; getnameinfo(addr->ai_addr, addr->ai_addrlen, resolved, NI_MAXHOST, 0, 0, 0); return resolved; } @@ -335,6 +342,13 @@ char *Jupiter::Socket::resolveHostname(addrinfo *addr, unsigned int result) // s return Jupiter::Socket::resolveHostname(ptr); } +char *Jupiter::Socket::resolveHostname_alloc(addrinfo *addr, unsigned int result) // static +{ + addrinfo *ptr = Jupiter::Socket::getAddrInfo(addr, result); + if (ptr == nullptr) return nullptr; + return Jupiter::Socket::resolveHostname_alloc(ptr); +} + char *Jupiter::Socket::resolveHostname(const char *hostname, unsigned int result) // static { addrinfo *info = Jupiter::Socket::getAddrInfo(hostname, 0); @@ -342,6 +356,13 @@ char *Jupiter::Socket::resolveHostname(const char *hostname, unsigned int result return Jupiter::Socket::resolveHostname(info, result); } +char *Jupiter::Socket::resolveHostname_alloc(const char *hostname, unsigned int result) // static +{ + addrinfo *info = Jupiter::Socket::getAddrInfo(hostname, 0); + if (info == nullptr) return nullptr; + return Jupiter::Socket::resolveHostname_alloc(info, result); +} + uint32_t Jupiter::Socket::pton4(const char *str) { in_addr r; diff --git a/Jupiter/Socket.h b/Jupiter/Socket.h index b83faa8..6ead2f2 100644 --- a/Jupiter/Socket.h +++ b/Jupiter/Socket.h @@ -126,11 +126,13 @@ namespace Jupiter /** * @brief Resolves an address to a hostname. (Reverse DNS) + * Note: the '_alloc' version of this does NOT use a static buffer. * * @param addr Address info containing IP address. * @return String containing the hostname of the stored address on success, nullptr otherwise. */ static char *resolveHostname(addrinfo *addr); + static char *resolveHostname_alloc(addrinfo *addr); /** * @brief Resolves an address to a hostname. (Reverse DNS) @@ -140,6 +142,7 @@ namespace Jupiter * @return String containing the hostname of the stored address on success, nullptr otherwise. */ static char *resolveHostname(addrinfo *addr, unsigned int result); + static char *resolveHostname_alloc(addrinfo *addr, unsigned int result); /** * @brief Resolves an address to a hostname. (Reverse DNS) @@ -149,6 +152,7 @@ namespace Jupiter * @return String containing the hostname of the resolved address on success, nullptr otherwise. */ static char *resolveHostname(const char *hostname, unsigned int result); + static char *resolveHostname_alloc(const char *hostname, unsigned int result); /** * @brief Reinterprets an IPv4 address as a 32-bit integer in network byte order. diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index 0978f35d81159762c9284285998ed88eb1001adf..216219b16154d0df0424408cd7745b6870a7369f 100644 GIT binary patch delta 34344 zcmcJ&33yIN8#g}Z%!nDjRhfIZH{%_ugBKAnI(;h&j##q4op? z{t9CRQFosLZ=4QE8Uq`$G`?KOIAQO31(8yeDfEbDg3vBQfp0Cv2%>+AM(j`~2=xyu z@YNwqVbvtY2`euvh#Ij>A^J5Y2MsP15R1p2TF#>P9Mj@R)62&yKaRu6S(P$41 z0r&J^jWeOlCH&e;CdDwM$$II}_H=dsKs{L)I}Yy@)^cH+8|iDw}IVO#_u9Y4-% zjGxH_;koS^&-Y}4Q1FaKAy|pPvNRl+QsGBjfhV_U3{GG|0TDhJ7+PLq$XF%_LpLh$ zp`nZqO@~H*Mk?@^rZ9!stq^R$_E{P`Ixr517(Z%dGC`<$&yTja0%_l9j2Xm)!gXAM zu{jzuUSWbzp_dC^yWH8@S$J{H?JXo6ay!c=MjdMg%5d6XJvLCg=!noYh#C z!nnd!T!H1gG?sqLxI#Nz+c7aH%#St5|3Pb*NS&p?x2{4|1MeUv2rI#m@NiF!mYAH7 z7_N~th;c&VQH>;I4Iz1)Myn4QS7?eW&}qF!XQV5k%Xs8}m+|-qq$PCk;|H|v4m?^< zqsJSJ6S}|>gs!tSx_!gALML2-N4IPAOk$ky*jzsZuE4{GHF_cX71B%K7vS;c8og&S zPIw%X5T4km5!-`tLjC<3u@IIJk8y;!Z3^z`i^!IXj7Oi;sIh@@z&-Ve0&m@x5yUeH zQbPK0L?huD1PNgTJ|r|lkPw>g)o6AU{|1`((U_ji1fgszjWYP1Q1%lAK4TwKI2etJ z349mn2L$~Ns1&1+&e=hx(G6F?frNwz_zQ6FWNX}wMd68Mye8-s>fl<3xxZCX;I+>( zf_pJcK`b1=6c(JsLIW%=rLm$Z6NIH%1myqn5gJR7!-U0iHC8|y!gAz4VOh9_uL~1| zOfVowSctF;*+WHDpiF0n27<_;!O&I({s^sWE2~6NK5wQNkS5e!}cn zjrqtD!aTT(Fdv15FgHbGH9k{lgDbF#`2nR?5uhmHrG0+%f&X9X!}y?fjH7z-0fVt@ zf}rzlCPW0|13@slxkeha0C*-`MA(8fB)kom5Z+DE*cQS#Ac}seQEVs^grs;s@OctY zypuvYuO^s6kqwL!iXt!wF8oZ`d`9D)Y}5p}qi7wCgzZca!qzD8imzb_evP^J-%;S3 z6EH4;xwq03xU&m!1-NZAD!qaLd?g*kQ3|}_0H*OfuD>()CKeinGq^&C3ecYL5K@a! z9NH5~gla^kF;1vDQ==LxDd9)Z5DuKz_@XD{grB|v((&VmUK)q`F;2LATVoHH5#C4M z6TTH1-$XG^xCko|F3i_B-cc}MS8)Xz z!_S0f4K|_QzlByV4`9=nD>cgyf3ur3uXgu?F-wE-F#B^W299k7{JpCh+2a@|l#5YtPoeA*POi{6ahJIY18@bi*Y|0>2FnqqV=N)#69rKn#f^{< zqQG~(#uVDGL3@YwpLd968i>{oK*t^$ox-tJhcow&b{f~$Fjt`vuE5o$8dq*ImvAj! z<9Bpa3L9}nMV!)0V=97I0ogDWNMAxg{hx-~O~@Fmk-s++3g>YJ3ZeoM3Sa;s^r}V? z_z&Q}!^{fVxB}Oi#ve#WK)8q}0-vujY$y{7SSyC5nNIgQ~2v~rA6b4g5Xg>vh z^#D`220sGA9j5VA0uu_D@F}3na*eJSN9YSH0{n?kjXD@lsEhbgK#bJ|>bKOWw;le+ z5BEwR1>Od^4~T)26nJaY1V9Wpt-wFt&J?~1W1Mgg^n~LZHO|B{PPo-dqdKyQPI|E=#C|2s|N9)gZ=7x_-OeO}|nmy8qsnxb(O6A-e_X{^g+oG`16 zA1FSvfGlJPVeM{>7q>93fb@P5D3^{&%H^Q{e?x(P(upa2wF?>o_mK^R6FoJeQ_$A| z;m{rsO>#7zL`(pDMpca$dNWS=cQ1`?Z(&&m*1|f3S0F4P(qF)GN{E9m3Gs*hXpSoo z`@2SiDNGPXwbE#`iwS_Qe?{Zf1nl1y0}4_<1?wKd0lz_b?-2{|1e*kdQE;k4D;;j1!*iq49iq#tEYrYK-c@ zIAQ1tjbVrn!jvf*GjY;^O@XYTT!%s6#DBnuKy>XB! z+=)R;4%|kuQdo~Gm{-`T5fjQdq1JE(_k0hg@Y_zb>Y%9&VF@vBA^-8iy)aGVJoX-H`9I;h#u!LTc=n>k^V?u%Ag!jxCXYda|^gFJ=pE`;OfXVk1#3>c2P*@Rf?h)147Pd zjjH`{1P4?(tpMHGQK_dq#LHMnc#yJcoe0W|# zbYG8B3_Kw;dQW45@c2yyJ`EZJqB2sAPzj}60WnYssCUSZp11;!OhWy~5ApDa8g1bh z!ox8dZQJ4BK${gBtuYy))kTdqA^1E5WqZHI4roTW3M&vkgjE1ha*6`?;opG3Mwh@d z&%^(j&~63NNudX>z%QdTZs2!7JU(8dPZ;(EVc6GYXcR?o5sF3mu?AP5Ijl-}vM~br z0AgmQMrb(W3K$a#6iJW951=_*KnN@0$0}Tb;-xemg5-q3QP}fe*O)Z{6%JS#sWEdS z6AB5q0%Z_egygdtqjzB|zYCkxa~dTX)(iSka)w3%Qi@Ol(h^D+@MAWvKq>rNVHU2y zVAP2+p?)mI6)0O&BjGf70o74_st=G~edl(0VMF+i4dG6?#E^lhBSwsVQl=)0aCz)q zx2T-_u3NjY=IkBrv055GqH%>y``V5-KNhw=vyHpx+Ab_`A1rF3dbHi5$+u(_{#XWN1Gb8!O`_MXGpUEsiMFgVCry}E*xsUujOik!W5&t)6%`|%jTCe#*;y~5c( z+%MFav#brAE&P(R^Lsffnj%aaO85XM<0>EcA@adj0CMRp(q*2H1dqkNw$AXRUs5S;SeF?F70# zD_F!h!OjCS#|yUoIl+29FW8xa5Uh|ssgHF8`w`gkq+khyF)>hns9<7wq~N!E(k5_R0*wdR2h-z_4=g zBQW+Y&dzM&?B1I&=|;E&zmLW5XWxJ+mvMF#*tMLqZCT^EPJ|O zt;*tBMzBwC-8X}?Xar~EcVG&{R0^E_wsoKwVkrBL%VH5f2Wvt>pwe$HJ6jvpx(NRd zSSZ*@q)w^Df;C+MA1@Vb#B%s}iC}Z_SvEd9gMWuF6Re95_cI}ognRJs7|;#|T|<1< z6Q9k-XS+dj6XPb$flFr#RutD*TxZRPVo25UxTeg-@2iobtKomP3X=gNfPF7POQ78# zjsQdCBGN}7Pj7cdU<%wD2=k4`gb1E)negcrWX{|0@w=RbY~$?9qDZe|g2g8Z_9f7% zIF{CGuy7GrrYJ1q!lj#G5yV9u&~8spK){3{^^nu=+;>?5Zl>LG*)Eu_4TxWXIiv9T zfQFp?4)nU|vNJ%#3Y?vM2m%!6EVKm1M8V%xIlF<$7XFCfI)I@20yd(OLp-#@ z^;^V2R702=2tj&Ps?6C?4$Xk27`Npy!KQRWs=*R;9(dyf0{A2}hA=ZfN4+sWd|VFk zfJ|C((q(r~z-_=jjJb<3epAR|uSYs9?uAi$8;UehWUUj<_g`y8Z+v z{FAfq@mbp6upH=e?jrJUBMonGHsvqSBaY5x!IkTfO|uYRzySPv_gbX)i*Wmk@L>*o z_68P=PM@HbW5OQykvbm{)kIt;LC|O5y5TT;c~rU^$Q;!D@Y^n1 z5A3XfLKTCwtOefZ@o%gF9csh>Z{fpf7qB4U!?&7Xf_z93U`tcDp#dfbqrLG6sus|+ zCHy-J(Y+G2e}-U7S99h@p$C`>mq7UI5PtX=_!+`)gYY$>$XN*A@F_$+gs%j;dJs4P zLcRv!$Bu{p<01Lr$(&6Xfh#mP-VbKPfP45X2R>|d3MK_oc494f4_e}SJRF|`17N~V zFniTV6s{EXgYfmRH()LNdsGM}gAzZcAf*>!MFkEZR?cBTI=T=&MzUbT(_0DV&II8( zv`bB~T2+A`F>r8xq)956AP$zpzX^@etyB?gKZ5A;qk?q+N}N_b$5AG)W0lIng3uDt+8EKk z8W?r1&W>j5b=Vbrj6#b-dLU=N8<`1msS?(>~ zBcmDuy(m_`V#p}q`{wX}<0sK#!_+fjqVP}<0MSLDMRR0C7@`{}RU8vNgn@%$t@&uV z5rmNl!i_WG8lZ6*tdj8OuF>#s6wF?dvl+mk1n?~Z^Or`^0t%Eu;R05GPiPrfAPhf> zmPOita6omWlpH+%?<7%wL`O?6Ub(+N&yg^TV^_hWaX zd){5d7P5J4K3l*_xv#mG-AnT42~KL+v+fJ-i|$N!zO&M4>I`rOI2hXZN&w#y#bpaF4ks-Q%+IWT#PuYwmaMx9)%4bI$MXP^TjM*6GHky3N=o_ktWf z*-3N?%eO&SxB$=3i?C2uoaK{OCOZ`zAq!7&8aW{{d5ZJ){|jrS7rEs+&Nla^>pGm5 zmQAKP%PL=V$2hsxOLHEy--T(;Q~!7Nt1EkEIPrzah|f93j51FPHk$4<`~PXdy5+|? z``J_IwhOsSUCWw$h%2v7cFG%r?ns^CWK5S~y`5rt?xsryfBL_+=HU|C{*WD~xLYVY z_(4Z)y*Pqrt?2a;@W*zp^esS31 z5Edac?Z_kUP(zDThnRwxtrwnAAe`e4yDjAXP+m+9JmHoyRA%;dN3GdYYWinSJmwBF zw3xlD?Eg4Q0x5Cim^;|qN-E=@tSu%hC{G=8o6}@f4MD~e@*Koq8lvi7%@NijUsYffXhfj?V@ zBjwf9cYd~v+^r`H>dZ542{nHjSeGQ$wPe~$PD|n)&^xk$U&;ocDn(RLzNBU$GVFIZ zNPz5L{1I~O7q{Dkx~HDCbT@Hx$Nn^ShJUU$m@8a5zq(DmuJndMt#eiwL|*gH{?R#i zfSEnJgNP|ik=P6zE8u0O%5$80GV6S>?3vQmw|Z|VQ=>GN){+z+Kk$Vzhb zdAGJqssWeJy9TZvzr!MBD$)aMxra8Pc!{RAOhA6zGE9grr9daj- zCO{R#8erHK44te9nO!D$$)HlELTatU1F1l@P-R~N2IEPV%0A}>w}$V~rV!#1&{2g3 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 a_t($zFgEXf#YFZM#f1|`Tqc?QFbB# delta 34046 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