Send_Data(CPI-C)
Send_Data 호출(함수 이름 cmsend)은 파트너 프로그램에 전송하기 위해 LU(로컬 논리 단위)의 송신 버퍼에 데이터를 넣습니다.
구문
CM_ENTRY Send_Data(
unsigned char FAR *conversation_ID,
unsigned char FAR *buffer,
CM_INT32 FAR *send_length,
CM_INT32 FAR *request_to_send_received,
CM_INT32 FAR *return_code
);
매개 변수
conversation_ID
제공된 매개 변수입니다. 대화의 식별자를 지정합니다. 이 매개 변수의 값은 Initialize_Conversation 또는 Accept_Conversation 반환되었습니다.
버퍼
제공된 매개 변수입니다. 로컬 RU 송신 버퍼에 넣을 데이터를 포함하는 버퍼의 주소를 지정합니다.
send_length
제공된 매개 변수입니다. 로컬 RU 송신 버퍼에 넣을 데이터 바이트 수를 지정합니다. 범위는 0에서 32767까지입니다.
매핑된 대화의 경우 send_length 0으로 설정된 경우 null 데이터 레코드가 파트너 프로그램에 전송됩니다.
기본 대화의 경우 send_length 0으로 설정된 경우 데이터가 전송되지 않습니다. 버퍼 매개 변수는 관련이 없습니다. 그러나 다른 매개 변수는 처리됩니다.
request_to_send_received
반환된 매개 변수입니다. 수신 요청 표시기입니다. 가능한 값은 다음과 같습니다.
CM_REQ_TO_SEND_RECEIVED
파트너 프로그램은 로컬 프로그램에 대화를 RECEIVE 상태로 변경하도록 요청하는 Request_To_Send 호출을 실행했습니다.
CM_REQ_TO_SEND_NOT_RECEIVED
파트너 프로그램에서 Request_To_Send 호출을 실행하지 않았습니다. return_code CM_PROGRAM_PARAMETER_CHECK 또는 CM_PROGRAM_STATE_CHECK 설정되면 이 값은 관련이 없습니다.
return_code
이 호출에서 반환된 코드입니다. 유효한 반환 코드는 이 항목의 뒷부분에 나와 있습니다.
반환 코드
CM_OK
기본 반환 코드; 호출이 성공적으로 실행되었습니다.
CM_OPERATION_NOT_ACCEPTED
기본 반환 코드; 이 대화에 대한 이전 작업이 완료되지 않았습니다.
CM_OPERATION_INCOMPLETE
기본 반환 코드; 작업이 완료되지 않았으며(처리 모드는 차단 해제에만 해당) 아직 진행 중입니다. 프로그램은 Wait_For_Conversation 실행하여 작업 완료를 기다리거나 Cancel_Conversation 작업 및 대화를 취소할 수 있습니다. Specify_Windows_Handle 호출된 경우 애플리케이션은 Microsoft® Windows® 메시지의 알림을 기다리며 Wait_For_Conversation 호출하지 않아야 합니다.
CM_PROGRAM_PARAMETER_CHECK
기본 반환 코드; 다음 중 하나가 발생했습니다.
conversation_ID 지정한 값이 잘못되었습니다.
send_length 지정한 값이 범위를 벗어났습니다(32767보다 큼).
이는 기본 대화이며 버퍼 의 처음 두 바이트에 잘못된 논리적 레코드 길이(0x0000, 0x0001, 0x8000 또는 0x8001)가 포함됩니다.
CM_PROGRAM_STATE_CHECK
기본 반환 코드; 다음 중 하나가 발생했습니다.대화 상태가 SEND 또는 SEND_PENDING 아닙니다.
기본 대화는 SEND 상태이며 send_type CM_SEND_AND_CONFIRM, CM_SEND_AND_DEALLOCATE 또는 CM_SEND_AND_PREP_TO_RECEIVE 설정됩니다. 그러나 데이터는 논리적 레코드 경계에서 끝나지 않습니다. 이 조건은 deallocate_type CM_DEALLOCATE_ABEND 설정되고 send_type CM_SEND_AND_DEALLOCATE 설정된 경우에만 허용됩니다.
CM_PRODUCT_SPECIFIC_ERROR
기본 반환 코드; 제품별 오류가 발생하여 제품 오류 로그에 기록되었습니다.CM_CONVERSATION_TYPE_MISMATCH
기본 반환 코드; 파트너 LU 또는 프로그램은 할당 요청에 지정된 대화 유형(기본 또는 매핑됨)을 지원하지 않습니다.CM_PIP_NOT_SPECIFIED_CORRECTLY
기본 반환 코드; 할당 요청이 비 CPI-C LU 6.2 TP(트랜잭션 프로그램)에 의해 거부되었습니다. 파트너 프로그램에는 CPI-C에서 지원하지 않는 하나 이상의 PIP 데이터 변수가 필요합니다.CM_SECURITY_NOT_VALID
기본 반환 코드; 할당 요청에 지정된 사용자 식별자 또는 암호가 파트너 LU에서 수락되지 않았습니다.CM_SYNC_LEVEL_NOT_SUPPORTED_PGM
기본 반환 코드; 파트너 프로그램은 할당 요청에 지정된 동기화 수준을 지원하지 않습니다.CM_TPN_NOT_RECOGNIZED
기본 반환 코드; 파트너 LU가 할당 요청에 지정된 프로그램 이름을 인식하지 못합니다.CM_TP_NOT_AVAILABLE_NO_RETRY
기본 반환 코드; 파트너 LU는 영구 조건으로 인해 할당 요청에 지정된 프로그램을 시작할 수 없습니다. 오류의 원인이 원격 노드에 기록될 수 있습니다. 오류가 수정될 때까지 할당을 다시 시도하지 마세요.CM_TP_NOT_AVAILABLE_RETRY
기본 반환 코드; 파트너 LU는 임시 조건으로 인해 할당 요청에 지정된 프로그램을 시작할 수 없습니다. 오류의 원인이 원격 노드에 기록될 수 있습니다. 할당을 다시 시도하세요.CM_PROGRAM_ERROR_PURGING
기본 반환 코드; 다음 중 하나가 발생했습니다.RECEIVE 또는 CONFIRM 상태인 동안 파트너 프로그램이 Send_Error. 전송되었지만 아직 수신되지 않은 데이터는 제거됩니다.
오류 방향이 CM_RECEIVE_ERROR 설정된 SEND_PENDING 상태에서 파트너 프로그램이 Send_Error. 데이터가 제거되지 않았습니다.
CM_RESOURCE_FAILURE_NO_RETRY
기본 반환 코드; 다음 중 하나가 발생했습니다.대화는 영구적 인 조건으로 인해 조기에 종료되었습니다. 오류가 수정될 때까지 다시 시도하지 마세요.
파트너 프로그램은 정상적으로 종료하기 전에 대화의 할당을 취소하지 않았습니다.
CM_RESOURCE_FAILURE_RETRY
기본 반환 코드; 모뎀 오류와 같은 임시 조건으로 인해 대화가 조기에 종료되었습니다. 대화를 다시 시도합니다.CM_DEALLOCATED_ABEND
기본 반환 코드; 다음 이유 중 하나로 인해 대화의 할당이 취소되었습니다.원격 프로그램에서 형식 매개 변수가 CM_DEALLOCATE_ABEND 설정된 Deallocate 를 실행했거나 원격 프로그램 비정상 종료 조건으로 인해 원격 LU가 실행되었습니다. 호출이 실행되었을 때 원격 프로그램에 대한 대화가 RECEIVE 상태이면 로컬 프로그램에서 전송하고 원격 프로그램에서 아직 받지 못한 정보가 제거됩니다.
원격 TP는 정상적으로 종료되었지만 종료하기 전에 대화의 할당을 취소하지 않았습니다. 원격 LU의 노드 서비스가 원격 TP를 대신하여 대화의 할당을 취소했습니다.
CM_DEALLOCATED_ABEND_SVC
기본 반환 코드; 다음 이유 중 하나로 인해 대화의 할당이 취소되었습니다.파트너 프로그램에서 형식 매개 변수가 ABEND_SVC 설정된 Deallocate 를 발급했습니다.
파트너 프로그램은 종료하기 전에 대화의 할당을 취소하지 않았습니다.
로컬 프로그램에서 이 호출을 실행할 때 파트너 프로그램에 대한 대화가 RECEIVE 상태이면 로컬 프로그램에서 보낸 데이터와 파트너 프로그램에서 아직 받지 못한 데이터가 제거됩니다.
CM_DEALLOCATED_ABEND_TIMER
기본 반환 코드; 파트너 프로그램에서 형식 매개 변수가 ABEND_TIMER 설정된 Deallocate 를 실행했기 때문에 대화의 할당이 취소되었습니다. 로컬 프로그램에서 이 호출을 실행할 때 파트너 프로그램에 대한 대화가 RECEIVE 상태이면 로컬 프로그램에서 보낸 데이터와 파트너 프로그램에서 아직 받지 못한 데이터가 제거됩니다.CM_SVC_ERROR_PURGING
기본 반환 코드; SEND 상태인 동안 파트너 프로그램 또는 파트너 LU는 형식 매개 변수가 SVC로 설정된 Send_Error 발급했습니다. 파트너 프로그램에 전송된 데이터가 제거되었을 수 있습니다.상태 변경
프로그램이 이 호출을 발급할 때 대화는 SEND 또는 SEND_PENDING 상태여야 합니다.
다음 표에는 return_code CM_OK 설정되면 가능한 상태 변경 내용이 요약되어 있습니다.
send_type | 이전 상태 | 새 상태 |
---|---|---|
CM_BUFFER_DATA | SEND | 변경 내용 없음 |
CM_BUFFER_DATA | SEND_PENDING | SEND |
CM_SEND_AND_FLUSH | SEND | 변경 내용 없음 |
CM_SEND_AND_FLUSH | SEND_PENDING | SEND |
CM_SEND_AND_CONFIRM | SEND | 변경 내용 없음 |
CM_SEND_AND_CONFIRM | SEND_PENDING | SEND |
CM_SEND_AND_PREP_TO_ RECEIVE | 사용할 수 없음 | RECEIVE |
CM_SEND_AND_DEALLOCATE | 사용할 수 없음 | RESET |
CM_PROGRAM_ERROR_PURGING 또는 CM_SVC_ERROR_PURGING return_code 값의 경우 대화가 RECEIVE 상태로 변경됩니다. 다른 비 CM_OK 값의 경우 대화가 RESET 상태로 변경됩니다.
설명
로컬 RU 송신 버퍼에서 수집된 데이터는 다음 중 하나가 발생할 때 파트너 LU 및 파트너 프로그램으로 전송됩니다.
송신 버퍼가 채워지게 됩니다.
로컬 프로그램은 플러시, 확인 또는 할당 취소 호출 또는 RU 송신 버퍼를 플러시하는 기타 호출을 발급합니다. ( Set_Send_Type 설정되는 일부 송신 형식에는 플러시 기능이 포함됩니다.)
전송할 데이터는 다음 중 하나일 수 있습니다.
매핑된 대화의 전체 데이터 레코드입니다. 전체 데이터 레코드는 send_length 매개 변수에 지정된 길이의 문자열입니다.
기본 대화의 전체 논리적 레코드 또는 부분입니다. 전체 논리 레코드는 LL 값에 의해 결정됩니다. (하나의 논리적 레코드가 종료되고 새 레코드가 전송될 데이터 문자열의 중간에 시작될 수 있습니다.)
LU는 보낼 데이터 문자열에서 ASCII와 EBCDIC 간의 변환을 자동으로 수행하지 않습니다. 필요한 경우 프로그램에서 CSV(Common Service Verb) CONVERT 를 사용하여 문자열을 한 문자 집합에서 다른 문자 집합으로 변환할 수 있습니다.