pdcomm_gem_equipment_respond_enhanced_command
함수
수신한 S2F49에 대해 S2F50 확장 원격 명령 확인 응답(Enhanced Remote Command Acknowledge)을 보냅니다.
PdcommStatus pdcomm_gem_equipment_respond_enhanced_command(PdcommTcpEndpoint *endpoint, PdcommGemResult *result, uint8_t decision, const PdcommSecsItem *acknowledgements, PdcommGemCommandReply *reply)수락 판정(admission), 검증 오류, 한도, 완료 CEID는 수신 시점에 확정되었습니다. 결정 값으로는 PDCOMM_GEM_COMMAND_* HCACK 값 0부터 6까지를 사용합니다.
- 수락 판정에서 요청을 거부했으면 원래 HCACK와 확정된 확인 응답 엔트리를 보냅니다.
acknowledgements는 무시합니다. - 수락 판정에서 요청을 수락했으면
decision을 보냅니다. 결정이 #PDCOMM_GEM_COMMAND_PARAMETER_ERRORS이면acknowledgements가 바깥 List 항목이어야 하고, 그 밖의 결정에서는 NULL이어야 합니다.
각 바깥 엔트리는 L[CPNAME, ACK]입니다. ACK는 0부터 4까지의 U1 스칼라 CEPACK, U1 스칼라 CEPACK 값의 List, 또는 중첩된 L[CPNAME, ACK] 엔트리의 List입니다. 모든 바깥 엔트리에는 0이 아닌 CEPACK가 하나 이상 있어야 합니다. 0이 아닌 값의 총개수는 max_errors를 넘으면 안 되며, 응답 전체가 전송 한도에 맞아야 합니다. 결정 3에서 빈 바깥 List는 유효합니다. 이름, 순서, 0 코드의 위치는 주어진 그대로 보내며 요청과 대조하지 않습니다.
응답 전체를 준비한 뒤에 보냅니다. 전송에 성공했을 때만 responded와 reply_sent를 설정합니다. 실패하면 reply를 지우고, 결과는 재시도할 수 있는 상태로 남습니다. 같은 확인 응답으로 재시도하고, 이미 완료한 작업은 절대 다시 실행하지 않습니다. 지연 작업은 HCACK 4 응답이 받아들여진 뒤에만 시작합니다. 실제 HCACK가 0 또는 4이면 완료 CEID가 반환될 수 있습니다. 그 이벤트는 별도로 보고합니다.
매개변수
| 이름 | 설명 |
|---|---|
endpoint | result를 만든 장비 엔드포인트입니다. |
result | 결과 유형이 #PDCOMM_GEM_ENHANCED_COMMAND_RECEIVED인 요청 결과입니다. |
decision | 수락된 요청에 보낼 HCACK입니다. 0부터 6까지입니다. |
acknowledgements | 결정 3에 사용하는 확인 응답 엔트리의 바깥 List입니다. 그 밖의 결정에서는 NULL입니다. 메시지에 복사됩니다. |
reply | 호출자 저장 공간입니다. 호출 전에 reply->struct_size를 설정합니다. 먼저 지워지고, 성공하면 기록됩니다. |
반환값
S2F50이 큐에 들어가면 #PDCOMM_OK를 반환합니다. endpoint, result, reply 중 하나가 NULL이거나, reply->struct_size가 너무 작거나, decision이 6보다 크거나, result가 확장 명령 결과가 아니거나, acknowledgements가 결정과 맞지 않거나, 엔트리 형식이 잘못되었으면(잘못된 구조, 잘못된 이름, 4보다 큰 CEPACK, 0이 아닌 CEPACK가 없는 바깥 엔트리) #PDCOMM_INVALID_ARGUMENT를 반환합니다. 0이 아닌 CEPACK 개수가 max_errors를 넘거나, 이름이 max_identifier_bytes를 넘거나, 메시지가 항목 한도를 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. result가 호스트 응답이거나, 엔드포인트에 GEM 장비가 없거나, 통신 상태가 COMMUNICATING이 아니면 #PDCOMM_INVALID_STATE를 반환합니다. 요청이 다른 엔드포인트, 이전 연결 세대 또는 이전 선택(selection)에서 왔거나, 이미 응답했거나, 응답 슬롯이 더 이상 열려 있지 않으면 #PDCOMM_STALE_TOKEN을 반환합니다. TCP 이벤트가 준비되어 있거나 TCP 큐가 가득 찼으면 #PDCOMM_BACKPRESSURE를 반환합니다. #PDCOMM_ALLOCATION_FAILED를 반환할 수 있습니다. 엔드포인트가 오염(poisoned) 상태이거나 패닉(panic)을 격리했으면 #PDCOMM_POISONED를 반환합니다. 그 밖에는 pdcomm_tcp_reply()와 마찬가지로 다른 TCP 응답 상태 코드를 반환합니다.
참고
- 스레드 안전성: 이 호출은
result를 변경합니다. 같은 결과에 대한 getter나 pdcomm_gem_result_destroy()와 동시에 실행하지 않습니다.