사용자 함수
본 장에서는 SNA LU 0와 SNA LU 6.2에서 사용하는 사용자 함수를 설명한다.
1. SNA LU 0
헤더 파일
다음은 사용자 함수를 사용하기 위한 헤더 파일이다.
<lu0gw_prototype.h>
#ifndef _LU0GW_PROTOTYPE_H_ #define _LU0GW_PROTOTYPE_H_ #ifndef _WIN32 int get_msg_info(char *header, char *snddata, char *rcvdata); #endif #endif /* _LU0GW_PROTOTYPE_H_ */
소스코드 파일
다음은 사용자 함수를 사용하기 위한 소스코드 파일이다.
<custom.c>
#include <stdio.h> #include <fcntl.h> #include <string.h> #include <sys/types.h> #include "lu0gw_prototype.h" /* --------------------------------------------------------------- get_msg_info : 호스트로부터 응답 데이터를 수신하면 호출된다. header : 사용자 헤더, NULL 체크 필요 snddata : 호스트 송신 데이터 rcvdata : 호스트 수신 데이터 return : 0보다 클 경우, 정상 반환 0일 경우, 호스트 수신 데이터 버림(NOREPLY 처리) -1일 경우, 호스트 수신 데이터 버림(계속 메시지 기다림) --------------------------------------------------------------- */ int get_msg_info(char *header, char *snddata, char *rcvdata) { /* 전송 데이터가 없을 경우: 이미 timeout 되었음 */ if (snddata == NULL) return 1; /* must 1 return */ return 1; }
2. SNA LU 6.2
헤더 파일
다음은 사용자 함수를 사용하기 위한 헤더 파일이다.
<lu62sgw_prototype.h>
#ifndef _LU62SGW_PROTOTYPE_H_ #define _LU62SGW_PROTOTYPE_H_ #ifndef _WIN32 int get_wsname(char *uhead, char *wsname); int get_msg_info(char *data, int len); int put_msg_info(char *data, int len, char *luname); int get_msg_info2(TPGWINFO_T *gwinfo, char *data, int len); int put_msg_info2(TPGWINFO_T *gwinfo, char *data, int len, char *luname); #endif #endif /* _LU62SGW_PROTOTYPE_H_ */
소스코드 파일
다음은 사용자 함수를 사용하기 위한 소스코드 파일이다.
<custom.c>
#include <stdio.h> #include <fcntl.h> #include <string.h> #include <sys/types.h> #include <usrinc/atmi.h> #include <usrinc/hlinkapi.h> #include "lu62sgw_prototype.h" /* get_msg_info() return value */ #define DATA_INCOMPLETE 0 #define DATA_COMPLETE 1 /* --------------------------------------------------------------- get_msg_info2/put_msg_info2를 사용하고 싶으면, _tmax_custom_version = 2 로 변경 ---------------------------------------------------------------- */ int _tmax_custom_version = 0; /* --------------------------------------------------------------- get_wsname : 사용자 헤더 중에서 호스트로 서비스를 요청한 클라이언트명을 반환한다. 호스트로 데이터 전송 전에 호출된다. uhead: 사용자 헤더 데이터 wsname : 클라이언트명이 저장될 buffer ---------------------------------------------------------------- */ int get_wsname(char *uhead, char *wsname) { if (uhead == NULL) return 1; return 1; } /* --------------------------------------------------------------- get_msg_info : 호스트 수신 데이터를 사용자가 처리할 수 있는 함수 이다. 대화형 모드인 경우에는 반드시 연속 메시지의 끝인지를 반환해야한다. 호스트 수신 데이터는 EBCDIC code이다. 호스트에서 Dealloc했을 경우에는 이 함수에 서 DATA_INCOMPLETE를 반환하더라도 DATA_COMPLETE로 처리한다. data: 호스트 수신 데이터 len : 호스트 수신 데이터 길이 return : 수신 완료(DATA_COMPLETE), 수신 미완료(DATA_INCOMPLETE) ---------------------------------------------------------------- */ int get_msg_info(char *data, int len) { return DATA_COMPLETE; } /* --------------------------------------------------------------- put_msg_info : 호스트 송신하기 전에 사용자가 처리할 수 있는 함수 이다. data: 호스트 송신 데이터 len : 호스트 송신 데이터 길이 luname : 호스트 송신 LU명 return : 성공하면 호스트로 전송할 실제 길이 반환, 실패값 -1을 반환하면 호스트로 전송하지 않고 오류를 client에 되돌림 ---------------------------------------------------------------- */ int put_msg_info(char *data, int len, char *luname) { return len; } /* --------------------------------------------------------------- get_msg_info2 : 호스트 수신 데이터를 사용자가 처리할 수 있는 함수 이다. 대화형 모드인 경우에는 반드시 연속 메시지의 끝인지를 반환해야한다. 호스트 수신 데이터는 EBCDIC code 이다. 호스트에서 Dealloc했을 경우에는 이 함수 에서 DATA_INCOMPLETE를 반환하더라도 DATA_COMPLETE로 처리한다. gwinfo: TPGWINFO_T 정보 구조체 data: 호스트 수신 데이터 len : 호스트 수신 데이터 길이 return : 수신 완료(DATA_COMPLETE), 수신 미완료(DATA_INCOMPLETE) ---------------------------------------------------------------- */ int get_msg_info2(TPGWINFO_T *gwinfo, char *data, int len) { return DATA_COMPLETE; } /* --------------------------------------------------------------- put_msg_info2 : 호스트 송신하기 전에 사용자가 처리할 수 있는 함수 이다. gwinfo: TPGWINFO_T 정보 구조체 data: 호스트 송신 데이터 len : 호스트 송신 데이터 길이 luname : 호스트 송신 LU명 return : 성공하면 호스트로 전송할 실제 길이 반환, 실패값 -1을 반환하면 호스트로 전송하지 않고 오류를 클라이언트에 되돌림 ---------------------------------------------------------------- */ int put_msg_info2(TPGWINFO_T *gwinfo, char *data, int len, char *luname) { return len; }