사용자 함수
본 장에서는 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;
}