SEND API

1. wbFlush

wbFlush는 현재 버퍼에 있는 모든 내용을 기록한다. C 언어의 fflush() 함수와 같은 기능을 한다. 현재 시스템 버퍼에 있는 모든 내용을 화면에 기록한다.

  • 프로토타입

    #include <wbapi.h>
    #include <atmi.h>
    int wbFlush(WBSVCINFO *rqst)
  • 반환값

    함수가 정상적으로 수행될 경우 wbFlush()은 1을 반환한다. 에러가 발생하는 경우 –1을 반환한다.

  • 예제

    <flush.m>

    *DOMAIN
    webtob1
    
    *NODE
     tmaxh1         WEBTOBDIR="/user2/haninho/webtob",
                    SHMKEY = 54777,
                    DOCROOT="/user2/haninho/webtob/docs",
                    APPDIR="/user2/haninho/webtob/ap",
                    PORT = “7654”
    *SVRGROUP
     htmlg          NODENAME = "tmaxh1", SvrType = HTML
     webapg         NODENAME = "tmaxh1", SVRTYPE = WEBSTD
    
    *SERVER
     html           SVGNAME = htmlg, MinProc = 1, MaxProc =2
     flush          SVGNAME = webapg, MinProc = 1, MaxProc = 2, 
    
    *SERVICE
     test           SVRNAME = flush
     test2          SVRNAME = flush
    
    *URI
     wbapi          Uri = "/svct/", Svrtype = WEBSTD
    
    *EXT
     htm            MimeType = "text/html", SvrType = HTML
    1. 환경파일 (Config-file)을 컴파일한다.

      $wscfl –i flush.m
    2. 서비스 테이블을 생성한다.

      $wsgst
    3. 소스 파일을 생성한다. 다음은 요청을 처리하는 WBAPI 프로그램 예제로 파일명은 flush.c이다.

       #include <stdio.h>
       #include "../usrinc/atmi.h"
       #include "../usrinc/wbapi.h"
      
       test(WBSVCINFO *rqst) {
       wbPrint(rqst, "<HTML>\n");
       wbFlush(rqst);
       wbPrint(rqst,"<H1>Tmax soft</H1> \n");
       wbFlush(rqst);
       wbPrint(rqst,"<h2>Tmax soft</h2> \n");
       wbFlush(rqst);
       wbPrint(rqst, "</HTML>\n");
       wbReturn(rqst, WBSUCCESS);
       }
       test2(WBSVCINFO *rqst) {
       wbPrint(rqst, "<HTML>\n");
       wbPrint(rqst,"<H1>Tmax soft</H1> \n");
       wbPrint(rqst,"<h2>Tmax soft</h2> \n");
       wbPrint(rqst, "</HTML>\n");
       wbReturn(rqst, WBSUCCESS);
       }
    4. WBAPI로 만들어진 c파일을, Makefile 파일을 이용하여 컴파일한다.

      $compile c flush
    5. 다음은 결과 출력에 대한 예이다.

      Telnet로 WBAPI 서비스 test를 요청하면 다음과 같은 결과가 나온다.

       wbFlush()사용.
       HTTP/1.1 200 OK
       Date: Thu, 01 Nov 2001 04:43:30 GMT
       Server: WebtoB/3.0
       Content-Type: text/html
       Transfer-Encoding: chunked
       7
       <HTML>
       14
       <H1>Tmax soft</H1>
       14
       <h2>Tmax soft</h2>
       8
       </HTML>
       0

      Telnet로 WBAPI 서비스 test2를 요청하면 다음과 같은 결과가 나온다.

       HTTP/1.1 200 OK
       Date: Thu, 01 Nov 2001 04:43:52 GMT
       Server: WebtoB/3.0
       Content-Type: text/html
       Content-Length:      55
      
       <HTML>
       <H1>Tmax soft</H1>
       <h2>Tmax soft</h2>
       </HTML>

2. wbSendError

wbSendError는 Status Code가 에러를 표시할 때 클라이언트에게 특정 메시지를 보여준다.

wbSendError()는 인수 status에 설정된 Status Code에 따라서 인수 msg에 설정된 간단한 메시지를 기본 메시지에 덧붙여서 클라이언트에게 보여줄 수 있다. 설정된 msg는 HTML 형태가 아닌 텍스트 형태의 메시지이다. msg를 NULL로 설정하면 기본 메시지만 출력된다.

wbSendError() 함수를 이용하게 되면 브라우저 화면을 갱신할 수 없다. 따라서 wbSendError() 함수가 호출된 후에는 wbPrint() 등의 출력함수를 호출하는 것은 아무 의미가 없다. 만약 HTML 형태로 클라이언트에게 더 많은 메시지를 출력하고 싶다면 wbSetStatus() 함수를 이용할 것을 권한다.

wbSendError() 함수를 사용하면 화면 갱신은 할 수 없지만 함수 내부에서 wbReturn() 함수를 호출하는 것은 아니므로 반드시 wbReturn() 함수로 반환해주어야 한다.

wbSendError()함수에 설정된 메시지는 일부 브라우저의 설정에 따라서 보여지지 않을 수 있다. 예를 들어, Microsoft Internet Explorer에서는 HTTP 오류 메시지를 표시하도록 설정이 되어있으면 WebtoB에서는 wsSendError()에서 설정된 메시지를 덧붙여 HTML 페이지를 작성하지만 Explorer에서 Status Code에 따라 그 자체에 설정된 HTML 페이지를 보여주게 된다.

  • 프로토타입

    #include <wbapi.h>
    #include <atmi.h>
    int wbSendError(WBSVCINFO *rqst, int status, char *msg)
  • 반환값

    함수가 정상적으로 수행될 경우 wbSendError()은 1을 반환한다. 에러가 발생하는 경우는 –1을 반환한다.

  • 예제

    <senderror.m>

    *DOMAIN
    webtob1
    
    *NODE
     tmaxh1         WEBTOBDIR="/user2/haninho/webtob",
                    SHMKEY = 54777,
                    DOCROOT="/user2/haninho/webtob/docs",
                    APPDIR="/user2/haninho/webtob/ap",
                    PORT = “7654”
    
    *SVRGROUP
     htmlg          NODENAME = "tmaxh1", SvrType = HTML
     webapg         NODENAME = "tmaxh1", SVRTYPE = WEBSTD
    
    *SERVER
     html           SVGNAME = htmlg, MinProc = 1, MaxProc =2
     senderror      SVGNAME = webapg, MinProc = 1, MaxProc = 2, 
    
    *SERVICE
     test           SVRNAME = senderror
    
    *URI
     wbapi          Uri = "/svct/", Svrtype = WEBSTD
    
    *EXT
     htm            MimeType = "text/html", SvrType = HTML
    1. 환경파일 (Config-file)을 컴파일한다.

      $wscfl –i senderror.m
    2. 서비스 테이블을 생성한다.

      $wsgst
    3. 소스 파일을 생성한다. 다음은 요청을 처리하는 WBAPI 프로그램 예제로 파일명은 senderror.c이다.

       #include <stdio.h>
       #include <usrinc/atmi.h>
       #include <usrinc/wbapi.h>
       test(WBSVCINFO *rqst)
       {
              wbPrint(rqst, "<HTML>\n");
              wbPrint(rqst, "<HEAD><TITLE>wbSendError Test</TITLE> </HEAD>\n");
              wbPrint(rqst, "<BODY>\n");
              wbPrint(rqst, "<H1>Not Printed</H1>\n");
              wbPrint(rqst, "</BODY>\n");
              wbPrint(rqst, "</HTML>\n");
              wbSendError(rqst, 404, "File is not exist");
              wbReturn(rqst, WBSUCCESS);
       }
    4. WBAPI로 만들어진 c파일을, Makefile 파일을 이용하여 컴파일한다.

      $compile c senderror
    5. 다음은 결과가 출력된 화면이다.

      브라우저로 WBAPI 서비스 test를 요청하면 다음과 같은 결과가 나온다.

      Internet Explorer의 경우에는 [도구] > [인터넷 옵션] > [고급] > [HTTP 오류 메시지 표시]의 체크를 하지 않아야 이러한 결과를 볼 수 있다.

      image

  • 관련 함수

    wbSetStatus()

3. wbSendRedirect

wbSendRedirect는 지정된 주소로 응답을 되돌려준다. Status Code와 Location Header를 세팅하면서 지정된 주소로 응답을 되돌려준다. 주소는 상대경로와 절대경로 모두 설정이 가능하다. 절대경로를 설정할때에는 “http://”를 설정한다.

wbSendRedirect()함수를 사용하면 화면 갱신은 할 수 없지만 함수 내부에서 wbReturn()함수를 호출하는 것은 아니므로 반드시 wbReturn()함수로 반환해주어야 한다.

  • 프로토타입

    #include <wbapi.h>
    #include <atmi.h>
    int wbSendRedirect(WBSVCINFO *rqst, char *location);
  • 반환값

    함수가 정상적으로 수행될 경우 wbSendRedirect()은 1을 반환한다. 에러가 발생한 경우 –1을 반환한다.

  • 예제

    <redirect.m>

    *DOMAIN
    webtob1
    
    *NODE
     tmaxh1         WEBTOBDIR="/user2/haninho/webtob",
                    SHMKEY = 54777,
                    DOCROOT="/user2/haninho/webtob/docs",
                    APPDIR="/user2/haninho/webtob/ap",
                    PORT = “7654”
    
    *SVRGROUP
     htmlg          NODENAME = "tmaxh1", SvrType = HTML
     webapg         NODENAME = "tmaxh1", SVRTYPE = WEBSTD
    
    *SERVER
     html           SVGNAME = htmlg, MinProc = 1, MaxProc =2
     redirect       SVGNAME = webapg, MinProc = 1, MaxProc = 2, 
    
    *SERVICE
     test           SVRNAME = redirect
    
    *URI
     wbapi          Uri = "/svct/", Svrtype = WEBSTD
    
    *EXT
     htm            MimeType = "text/html", SvrType = HTML
    1. 환경파일 (Config-file)을 컴파일한다.

      $wscfl –i redirect.m
    2. 서비스 테이블을 생성한다.

      $wsgst
    3. 소스 파일을 생성한다. 다음은 요청을 처리하는 WBAPI 프로그램 예제로 파일명은 redirect.c이다.

       #include <stdio.h>
       #include "../usrinc/atmi.h"
       #include "../usrinc/wbapi.h"
       test(WBSVCINFO *rqst) {
       wbSetStatus(rqst, 302, NULL);
       wbSendRedirect(rqst, "http://www.tmax.co.kr");
       wbReturn(rqst, WBSUCCESS);
       }
    4. WBAPI로 만들어진 c파일을, Makefile 파일을 이용하여 컴파일한다.

      $compile c redirect
    5. 다음은 결과가 출력된 화면이다.

      브라우저로 WBAPI 서비스를 요청하면 다음과 같은 결과가 나온다.

      image

4. wbReturn

wbReturn은 WBAPI의 반환을 알린다.

WBAPI의 종료를 알리는 것으로 C 언어에서의 리턴 문장과 같은 역할을 수행하며 각 WBAPI의 프로그램의 마지막에서는 항상 이 wbReturn()을 선언하여야 한다. wbReturn()이 호출되면 Request된 서비스가 종료된다. WBAPI의 실행이 성공적으로 종료되었을 경우 반환값은 WBSUCCESS를 실패한 경우에는 WBEXIT, WBDOWN, WBERROR, WBFAIL중에서 상황에 맞게 선택적으로 설정한다. 만약 다른 값으로 선언할 경우에는 프로그램 내부에서 문제가 생길 수 있기 때문에 반드시 wbReturn() 을 선언 하도록 한다.

rval 인수로는 다음 값들이 사용될 수 있다.

인수 설명

[WBSUCCESS]

서비스가 성공적으로 종료되었다.

[WBEXIT]

서비스가 비정상적으로 종료되었다.

rval에 이 값을 설정하게 되면 WebtoB가 이 서비스를 수행하고 있는 서버 프로세스를 비정상적으로 종료시킨다. 하지만 관리 프로세스인 WSM이 종료된 서버 프로세스를 restart하게 된다.

[WBDOWN]

서비스가 비정상적으로 종료되었다.

rval에 이 값을 설정하게 되면 WebtoB가 이 서비스를 수행하고 있는 서버 프로세스를 정상적으로 종료시킨다.

[WBDOWN]을 이용하여 서버 프로세스를 종료시키게 되면 “wsdown –S”를 이용하여 서버 프로세스를 종료시킨 것과 동일한 결과를 유발한다.

[WBERROR]

서비스가 비정상적으로 종료되었다.

인수 rval에 이 값을 설정하게 되면 XA Auto 트랜잭션을 사용할 경우에는 서비스를 종료할 때 반환되면서 롤백된다.

또한 [WBERROR]를 사용하여 반환하게 되면 클라이언트에게 사용자가 설정한 화면을 보여줄 수 있다. 현재 API 서비스에서 지금까지 사용했던 PUT 계열의 함수를 통해서 클라이언트의 브라우저에 사용자가 설정한 화면을 보여줄 수 있다.

[WBFAIL]

서비스가 비정상으로 종료되었다.

인수 rval에 이 값을 설정하게 되면 Response의 Status Code는 500으로 설정되고 클라이언트의 브라우저에는 “Internal Server Error”라는 화면이 출력된다.

  • 프로토타입

    #include <wbapi.h>
    #include <atmi.h>
    wbReturn(WBSVCINFO *rqst, int rval)
  • 반환값

    함수가 정상적으로 수행될 경우 wbReturn()은 1을 반환한다. 에러가 발행한 경우는 –1을 반환한다.

  • 예제

    <return.m>

    *DOMAIN
    webtob1
    
    *NODE
     tmaxh1         WEBTOBDIR="/user2/haninho/webtob",
                    SHMKEY = 54777,
                    DOCROOT="/user2/haninho/webtob/docs",
                    APPDIR="/user2/haninho/webtob/ap",
                    PORT = “7654”
    
    *SVRGROUP
     htmlg          NODENAME = "tmaxh1", SvrType = HTML
     webapg         NODENAME = "tmaxh1", SVRTYPE = WEBSTD
    
    *SERVER
     html           SVGNAME = htmlg, MinProc = 1, MaxProc =2
     return         SVGNAME = webapg, MinProc = 1, MaxProc = 2, 
    
    *SERVICE
     test           SVRNAME = return
     test2          SVRNAME = return
    
    *URI
     wbapi          Uri = "/svct/", Svrtype = WEBSTD
    
    *EXT
     htm            MimeType = "text/html", SvrType = HTML
    1. 환경파일 (Config-file)을 컴파일한다.

      $wscfl –i return.m
    2. 서비스 테이블을 생성한다.

      $wsgst
    3. 소스 파일을 생성한다. 다음은 요청을 처리하는 WBAPI 프로그램 예제로 파일명은 return.c이다.

       #include <stdio.h>
       #include "../usrinc/atmi.h"
       #include "../usrinc/wbapi.h"
       test(WBSVCINFO *rqst)
       {
       wbPrint(rqst, "<HTML>\n");
       wbPrint(rqst,"<H1>Tmax soft</H1> \n");
       wbPrint(rqst,"<h2>Tmax soft</h2> \n");
       wbPrint(rqst, "</HTML>\n");
       wbReturn(rqst, WBSUCCESS);
       }
      
       test2(WBSVCINFO *rqst)
       {
       wbPrint(rqst, "<HTML>\n");
       wbPrint(rqst,"<H1>Tmax soft</H1> \n");
       wbPrint(rqst,"<h2>Tmax soft</h2> \n");
       wbPrint(rqst, "</HTML>\n");
       wbReturn(rqst, WBFAIL);   
       }
    4. WBAPI로 만들어진 c파일을, Makefile 파일을 이용하여 컴파일한다.

      $compile c return
    5. 다음은 결과가 출력된 화면이다.

      브라우저로 WBAPI 서비스를 요청하면 다음과 같은 결과가 나온다.

      wbReturn(rqst, WBSUCCESS)

      image

      브라우저로 WBAPI 서비스를 요청하면 다음과 같은 결과가 나온다.

      wbReturn(rqst, WBFAIL)

      image