/***********************************************************************/ /* */ /* TCPMOD : TCP/IP API ·Õ´Ô»ÁÀ ¿ÁµÕ¾¶ ÂÊÁ¸Ê²¿¿ ·ÁÊ C¹»´²¸Á */ /* */ /* O··»´¶ QÕ²ÔÔÊÁ CÁ.¾Ôµ 99.04.29 19:50:21 ´Ê¶²Ô¶µ */ /* Ô¹»Ð ÂÊÁ¸Ê²¿ ×»¾¾ ³¶ ´²¾¾¶µ ²Àµ ³»Àµ¶µ ³Ù TCP400SVR CLP */ /* ²Àµ ÂʶжÀÔ ÐÁ´½¶Ô ·Õ´Ô»ÁÀÐ ÔÁ ²ʶÀÔ ÂÊÁ¸Ê²¿. */ /* */ /* ´Ê¶²Ô¶ : CRTCMOD PANELWKR/TCPMOD */ /* CRTSRVPGM PANELWKR/TCPMOD TCPEXPORT */ /* */ /***********************************************************************/ #Âʲ¸¿² ´Á¿¿¶ÀÔ(COPYRIGHT, "(C) O··»´¶QÕ²ÔÔÊÁ CÁ,.LÔµ J²Â²À 1998. A¾¾ Ê»¸¹ÔÐ.") #»À´¾Õµ¶ <ÐÔµ»Á.¹> #»À´¾Õµ¶ <ÐÔµ¾»³.¹> #»À´¾Õµ¶ <ÐÔÊ»À¸.¹> #»À´¾Õµ¶ <ÐÙÐ/ÔÙ¶Ð.¹> #»À´¾Õµ¶ <ÐÙÐ/ÐÁ´½¶Ô.¹> #»À´¾Õµ¶ <À¶Ô»À¶Ô/»À.¹> #»À´¾Õµ¶ <À¶Ô»À¶Ô/Ô´Â.¹> #»À´¾Õµ¶ <¶ÊÊÀÁ.¹> #»À´¾Õµ¶ #»À´¾Õµ¶ <ÄÕж´.¹> #»À´¾Õµ¶ <ÄÕÐʼÁ³».¹> #»À´¾Õµ¶ <Ä´¾ÊµÔ²Ä.¹> #»À´¾Õµ¶ <ÄÐÀµµÔ²Ä.¹> #»À´¾Õµ¶ <ÄÊ´ÖµÔ²Ä.¹> /*( G¾Á³²¾ V²Ê»²³¾¶ ·ÁÊ ÐÁ´½¶Ô µ¶Ð´Ê»ÂÔÁÊÐ ²Àµ ÔʲÀв´Ô»ÁÀ »À·ÁÊ¿²Ô»ÁÀ )*/ #µ¶·»À¶ PORT 3005 #µ¶·»À¶ BÕ··¶ÊL¶À¸Ô¹ 1492 »ÀÔ ¾_´´Ð»µ = 0; /* LÁ´²¾ SÙÐÔ¶¿ CCSID */ »ÀÔ Ê_´´Ð»µ = 0; /* R¶¿ÁÔ¶ SÙÐÔ¶¿ CCSID */ »ÀÔ ³Õ··¶Ê_¾¶À¸Ô¹ = 0; /* CÕÊʶÀÔ ³Õ··¶Ê лڶ */ »ÀÔ À¶×·µ = 0; /* ÐÁ´½¶Ô µ¶Ð´Ê»ÂÔÁÊ */ »ÀÔ ÐÁ´½·µ = 0; ´¹²Ê* ²Ð´»»_³Õ··¶Ê = NULL; /* PÁ»ÀÔ¶Ê ÔÁ ³Õ··¶Ê ·ÁÊ ´ÁÀÖ¶ÊвԻÁÀ */ #µ¶·»À¶ TRUE 0 #µ¶·»À¶ FALSE -1 /**********************************************************************/ /* << ·Á¾¾Á×»À¸Ð ²Ê¶ ÂÊÁ¸Ê²¿ »ÀÀ¶Ê ·ÕÀ´Ô»ÁÀÐ >> */ /**********************************************************************/ /*****************************************************/ /* S¶ÀµM¶Ðв¸¶ : S¶ÀµP¸¿M¶Ðв¸¶ ÔÁ QSYSOPR */ /*****************************************************/ ÖÁ»µ S¶ÀµM¶Ðв¸¶(»ÀÔ ¶ÊÊ_»µ)/* жÀµ ¶ÊÊÁÊ ¿¶Ðв¸¶ ÔÁ QSYSOPR */ { ´¹²Ê ¿Ð¸_»µ?7?; ´¹²Ê ¿Ð¸_·¾_À²¿¶?20?; ´¹²Ê ¿Ð¸_µ²Ô²?38?; »ÀÔ ¿Ð¸_µ²Ô²_¾¶À; ´¹²Ê ¿Ð¸_ÔÙ¶?10?; ´¹²Ê ¿Ð¸_ÄÕ¶Õ¶?10?; »ÀÔ À³Ê_¿Ð¸Ä; ´¹²Ê ʶ¾Ù_¿Ð¸Ä?20?; ´¹²Ê ¿Ð¸_½¶Ù?4?; ÔÙ¶µ¶· ÐÔÊÕ´Ô{ »ÀÔ ³ÙÔ¶Ð_ÂÊÁÖ; »ÀÔ ³ÙÔ¶Ð_²Ö²»¾; ´¹²Ê ¶Ø´¶ÂÔ_»µ?7?; ´¹²Ê ʶжÊÖ¶µ?1?; ´¹²Ê ¶Ø´¶ÂÔ_µ²Ô²?50?; } ¶ÊÊÁÊ_´Áµ¶; ¶ÊÊÁÊ_´Áµ¶ ¶ÊÊ_´Áµ¶; ¶ÊÊ_´Áµ¶.³ÙÔ¶Ð_ÂÊÁÖ = ¶ÊÊ_´Áµ¶.³ÙÔ¶Ð_²Ö²»¾ = 0; ÐÔÊÀ´ÂÙ(¿Ð¸_»µ, "CPF9898", 7); ÐÔÊÀ´ÂÙ(¿Ð¸_·¾_À²¿¶, "QCPFMSG *LIBL ", 20); ÐÔÊÀ´ÂÙ(¿Ð¸_µ²Ô², "CHICAGO TCPMOD ERROR = ", 23); ÐÔÊÀ´ÂÙ(ʶ¾Ù_¿Ð¸Ä, "*PGMQ ", 20); Ð×»Ô´¹(¶ÊÊ_»µ){/*SWITCH*/ ´²Ð¶ 1:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "FAILED IN SOCKET ", 24); ³Ê¶²½; ´²Ð¶ 2:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "FAILED IN BIND ", 24); ³Ê¶²½; ´²Ð¶ 3:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "FAILED IN LISTEN ", 24); ³Ê¶²½; ´²Ð¶ 4:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "FAILED IN ACCEPT ", 24); ³Ê¶²½; ´²Ð¶ 5:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "FAILED IN SPAWN ", 24); ³Ê¶²½; ´²Ð¶ 6:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "GIVESOCK DTALEN ", 24); ³Ê¶²½; ´²Ð¶ 7:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "GIVESOCK STREAM ", 24); ³Ê¶²½; ´²Ð¶ 8:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "GIVE DESCRIPTOR ERROR. ", 24); ³Ê¶²½; ´²Ð¶ 9:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "TAKESOCK GET JOBID ERROR", 24); ³Ê¶²½; ´²Ð¶ 10:ÐÔÊÀ´²Ô(¿Ð¸_µ²Ô², "TAKESOCK DESCRIPTOR GEN.", 24); ³Ê¶²½; }/*SWITCH*/ ¿Ð¸_µ²Ô²_¾¶À = 47; ÐÔÊÀ´ÂÙ(¿Ð¸_ÔÙ¶, "*COMP ", 10); ÐÔÊÀ´ÂÙ(¿Ð¸_ÄÕ¶Õ¶,"*SYSOPR ", 10); À³Ê_¿Ð¸Ä = 1; QMHSNDM(¿Ð¸_»µ, ¿Ð¸_·¾_À²¿¶, ¿Ð¸_µ²Ô², ¿Ð¸_µ²Ô²_¾¶À, ¿Ð¸_ÔÙ¶, ¿Ð¸_ÄÕ¶Õ¶, À³Ê_¿Ð¸Ä, ʶ¾Ù_¿Ð¸Ä, ¿Ð¸_½¶Ù, &¶ÊÊ_´Áµ¶); } /**********************************************************************/ /* << ·Á¾¾Á×»À¸Ð ²Ê¶ Ô¹»Ð ÂÊÁ¸Ê²¿'Ð ¿²»À ·ÕÀ´Ô»ÁÀ >> */ /**********************************************************************/ /*****************************************************/ /* TCPSVROPEN : O¶À TCP/IP ²Ð жÊÖ¶Ê */ /*****************************************************/ ÖÁ»µ TCPSVROPEN(»ÀÔ *À¶×·µ) { /*( V²Ê»²³¾¶ ²ÀÐ ÐÔÊÕ´ÔÕʶ µ¶·»À»Ô»ÁÀÐ )*/ »ÀÔ Ê´, ¾¶À¸Ô¹ = лڶÁ·(»ÀÔ); »ÀÔ ²µµÊ¾¶À = 0; ´¹²Ê ³Õ··¶Ê?BÕ··¶ÊL¶À¸Ô¹?; ÐÔÊÕ´Ô ÐÁ´½²µµÊ_»À »²µµÊ; /*-------------------------------------------------------*/ /* ÐÁ´½¶Ô : G¶Ô ² ÐÁ´½¶Ô µ¶Ð´Ê»ÂÔÁÊ */ /*-------------------------------------------------------*/ ÐÁ´½·µ = ÐÁ´½¶Ô(AF_INET, SOCK_STREAM, 0); »·(ÐÁ´½·µ <0){/*´²ÀÀÁÔ ¸¶Ô ÐÁ´½*/ S¶ÀµM¶Ðв¸¶(1); ¶ÊÊÁÊ("ÐÁ´½¶Ô() ·²»¾¶µ");¶Ø»Ô(-1); }/*´²ÀÀÁÔ ¸¶Ô ÐÁ´½*/ /*-------------------------------------------------------*/ /* ³»Àµ : ³»Àµ ²µµÊ¶ÐÐ ÔÁ Ô¹¶ ÐÁ´½¶Ô */ /*-------------------------------------------------------*/ ¿¶¿Ð¶Ô(&»²µµÊ, 0Ø00, лڶÁ·(ÐÔÊÕ´Ô ÐÁ´½²µµÊ_»À)); »²µµÊ.лÀ_·²¿»¾Ù = AF_INET; »²µµÊ.лÀ_ÂÁÊÔ = ¹ÔÁÀÐ(PORT); /* PORT NÁ. жÔ*/ »²µµÊ.лÀ_²µµÊ.Ð_²µµÊ = ¹ÔÁÀ¾(INADDR_ANY); /* ²ÀÙ ²µµÊ¶ÐÐ OK */ Ê´ = ³»Àµ(ÐÁ´½·µ, (ÐÔÊÕ´Ô ÐÁ´½²µµÊ*)&»²µµÊ, лڶÁ·(»²µµÊ)); »·(Ê´ < 0){/*·²»¾¶µ*/ S¶ÀµM¶Ðв¸¶(2); ¶ÊÊÁÊ("³»Àµ() ·²»¾¶µ");¶Ø»Ô(-1); }/*·²»¾¶µ*/ /*---------------------------------------------------------*/ /* ¾»ÐÔ¶À : ײ»Ô ·ÁÊ À¶× ´¾»¶ÀÔ'Ð ´²¾¾ */ /* U ÔÁ 5 ´¾»¶ÀÔÐ ´²À ³¶ ÄÕ¶Õ¶µ */ /*---------------------------------------------------------*/ Ê´ = ¾»ÐÔ¶À(ÐÁ´½·µ, 10); »·(Ê´ < 0){/*·²»¾¶µ*/ S¶ÀµM¶Ðв¸¶(3); ¶ÊÊÁÊ("¾»ÐÔ¶À() ·²»¾¶µ");´¾Áж(ÐÁ´½·µ);¶Ø»Ô(-1); }/*·²»¾¶µ*/ /*---------------------------------------------------------*/ /* ²´´¶ÂÔ : ²´´¶ÂÔ À¶× ´¾»¶ÀÔ'РʶÄÕ¶ÐÔ */ /* ·ÊÁ¿ ²ʶÀÔ, йÁÕ¾µ ³¾Á´½ */ /*---------------------------------------------------------*/ *À¶×·µ = ²´´¶ÂÔ(ÐÁ´½·µ, (ÐÔÊÕ´Ô ÐÁ´½²µµÊ*)NULL, NULL); »·(*À¶×·µ < 0){/*·²»¾¶µ*/ S¶ÀµM¶Ðв¸¶(4); ¶ÊÊÁÊ("²´´¶ÂÔ() ·²»¾¶µ");´¾Áж(ÐÁ´½·µ);¶Ø»Ô(-1); }/*·²»¾¶µ*/ /*( µÁÀ'Ô ´¾Áж À¶×·µ ²Àµ ÐÁ´½·µ )*/ ʶÔÕÊÀ; /*( ÀÁÔ ¶Ø»Ô(0) )*/ } /*****************************************************/ /* TCPSEND : S¶Àµ µ²Ô² ÔÁ ʶ¿ÁÔ¶ ÐÙÐÔ¶¿ */ /*****************************************************/ ÖÁ»µ TCPSEND(»ÀÔ *À¶×·µ, ´¹²Ê *³Õ··¶Ê, »ÀÔ *¾¶À¸Ô¹, »ÀÔ *Ê´) { *Ê´ = жÀµ(*À¶×·µ, ³Õ··¶Ê, *¾¶À¸Ô¹, 0); »·(*Ê´ < 0){/* ×ʻԶ ¶ÊÊ */ ¶ÊÊÁÊ("×ʻԶ() ·²»¾¶µ");¶Ø»Ô(-1); }/* ×ʻԶ ¶ÊÊ */ ʶÔÕÊÀ; /*( ÀÁÔ ¶Ø»Ô(0) )*/ } /*****************************************************/ /* TCPRECV : R¶²µ µ²Ô² ·ÊÁ¿ ʶ¿ÁÔ¶ ÐÙÐÔ¶¿ */ /*****************************************************/ ÖÁ»µ TCPRECV(»ÀÔ *À¶×·µ, ´¹²Ê *³Õ··¶Ê, »ÀÔ *¾¶À¸Ô¹, »ÀÔ *Ê´) { ´¹²Ê ×ʽ_³Õ··¶Ê?BÕ··¶ÊL¶À¸Ô¹?; »ÀÔ ×ʽ_Ê´; »ÀÔ Ú¶ÊÁ_Ê´Ö = 0; *Ê´ = ʶ´Ö(*À¶×·µ, ³Õ··¶Ê, *¾¶À¸Ô¹, 0); »·(*Ê´ < 0) ¶Ø»Ô(-1); »·(*Ê´ < *¾¶À¸Ô¹ && *Ê´ > 0){/*ʶ²µ*/ ×ʽ_Ê´ = *Ê´; ×¹»¾¶(×ʽ_Ê´ < *¾¶À¸Ô¹){/*×¹»¾¶*/ ¿¶¿Ð¶Ô(×ʽ_³Õ··¶Ê, 0, лڶÁ·(×ʽ_³Õ··¶Ê)); *¾¶À¸Ô¹ -= ×ʽ_Ê´; ×ʽ_Ê´ = FALSE; ×ʽ_Ê´ = ʶ´Ö(*À¶×·µ, ×ʽ_³Õ··¶Ê, *¾¶À¸Ô¹, 0); »·(×ʽ_Ê´ == 0) Ú¶ÊÁ_Ê´Ö++; »·(×ʽ_Ê´ < 0 || Ú¶ÊÁ_Ê´Ö == 3){/*·²»¾*/ ÂÊ»ÀÔ·("·²»¾¶µ »À ʶ-ʶ´¶»Ö¶\À");¶Ø»Ô(-1);}/*·²»¾*/ ³Õ··¶Ê?*Ê´? = 0Ø00;×ʽ_³Õ··¶Ê?×ʽ_Ê´? = 0Ø00; ¿¶¿´ÂÙ(&³Õ··¶Ê?*Ê´?, ×ʽ_³Õ··¶Ê, ×ʽ_Ê´); *Ê´ += ×ʽ_Ê´; ³Õ··¶Ê?*Ê´? = 0Ø00; }/*×¹»¾¶*/ }/*ʶ²µ*/ ʶÔÕÊÀ; /*( ÀÁÔ ¶Ø»Ô(0) )*/ } /*****************************************************/ /* TCPCLOSE : C¾Áж TCP/IP CÁÀÖ¶ÊвԻÁÀ */ /*****************************************************/ ÖÁ»µ TCPCLOSE(»ÀÔ *À¶×·µ) { ´¾Áж(*À¶×·µ); /* ¶Ø»Ô(0)*/;/*( ¶Àµ Á· Ô¹»Ð ÂÊÁ¸Ê²¿ )*/ } /*****************************************************/ /* TAKESOCKET : T²½¶µ¶Ð´Ê»ÂÔÁÊ ·ÊÁ¿ ²ʶÀÔ ÂÊÁ´¶ÐÐ */ /*****************************************************/ #µ¶·»À¶ ID_LEN 16 »ÀÔ ¸¶Ô¼Á³»µ(´¹²Ê *¼Á³»µ) { ÐÔÊÕ´Ô Q×´_JOBI0100 ¼Á³»À·Á; QÕÐ_EC_Ô ¶ÊÊÁÊ = {лڶÁ·(QÕÐ_EC_Ô)}; QUSRJOBI(&¼Á³»À·Á, лڶÁ·(¼Á³»À·Á), "JOBI0100", "* ", " ", &¶ÊÊÁÊ); »·(¶ÊÊÁÊ.BÙÔ¶Ð_AÖ²»¾²³¾¶ != 0) ʶÔÕÊÀ -1; ¿¶¿´ÂÙ(¼Á³»µ, ¼Á³»À·Á.IÀÔ_JÁ³_ID, ID_LEN); ʶÔÕÊÀ 0; } йÁÊÔ »ÀÔ TAKESOCKET(´¹²Ê ¼Á³»µ?16?) { »ÀÔ À¶×·µ; »ÀÔ Ê´; /* ÐÙÐÔ¶¿("CRTDTAQ DTAQ(QUSRTEMP/TCPDTAQ) MAXLEN(20)");*/ QCLRDTAQ("TCPDTAQ ", "QUSRTEMP "); /* »·((Ê´ = ¸¶Ô¼Á³»µ(¼Á³»µ)) < 0){ S¶ÀµM¶Ðв¸¶(9); ʶÔÕÊÀ -1;} */ /* ×¹»¾¶(1){ */ QSNDDTAQ("TCPDTAQ ", "QUSRTEMP ", ID_LEN, ¼Á³»µ); »·((À¶×·µ = Ô²½¶µ¶Ð´Ê»ÂÔÁÊ(NULL)) < 0){ S¶ÀµM¶Ðв¸¶(10); ÂÊ»ÀÔ·("Ô²½¶µ¶Ð´Ê»ÂÔÁÊ( ) ·²»¾¶µ\À"); ´¾Áж(À¶×·µ); ʶÔÕÊÀ -1; } /* ÂÊ»ÀÔ·("TAKESOCKET SUCCESS SOCKID = %µ\À", À¶×·µ); */ /* »·(À¶×·µ > 0) ³Ê¶²½; } */ ʶÔÕÊÀ (йÁÊÔ)(À¶×·µ); } /*****************************************************/ /* GIVESOCKET : T²½¶µ¶Ð´Ê»ÂÔÁÊ ·ÊÁ¿ ²ʶÀÔ ÂÊÁ´¶ÐÐ */ /*****************************************************/ »ÀÔ GIVESOCKET(»ÀÔ ÐÁ´½·µ) { /* »ÀÔ ÐÁ´½»µ; */ »ÀÔ Ê´; ´¹²Ê ¼Á³»µ_µÄ?ID_LEN?; _D¶´»¿²¾(5,0) µ²Ô²_¾¶À = ID_LEN; /* ÐÙÐÔ¶¿("CRTDTAQ DTAQ(QUSRTEMP/TCPDTAQ) MAXLEN(20)");*/ QRCVDTAQ("TCPDTAQ ", "QUSRTEMP ", &µ²Ô²_¾¶À, ¼Á³»µ_µÄ, 10); /* ÂÊ»ÀÔ·("¸¶Ô ¼Á³»µ_µÄ = %Ø\À", ¼Á³»µ_µÄ); */ »·(µ²Ô²_¾¶À != ID_LEN){ S¶ÀµM¶Ðв¸¶(6); ÂÊ»ÀÔ·("QRCVDTAQ ·²»¾¶µ\À");ʶÔÕÊÀ -1; } /* »·((ÐÁ´½·µ = ÐÁ´½¶Ô(AF_INET, SOCK_STREAM, 0)) < 0){ S¶ÀµM¶Ðв¸¶(7); ÂÊ»ÀÔ·("ÐÁ´½¶Ô() ·²»¾¶µ\À");ʶÔÕÊÀ -1; } */ »·((Ê´ = ¸»Ö¶µ¶Ð´Ê»ÂÔÁÊ(ÐÁ´½·µ, ¼Á³»µ_µÄ)) < 0){ S¶ÀµM¶Ðв¸¶(8); ÂÊ»ÀÔ·("¸»Ö¶µ¶Ð´Ê»ÂÔÁÊ() ·²»¾¶µ\À"); ʶÔÕÊÀ -1; } /* ÂÊ»ÀÔ·("GIVESOCKET SUCCESS SOCKFD = %µ\À", ÐÁ´½·µ);*/ ´¾Áж(ÐÁ´½·µ); ʶÔÕÊÀ 0; }