static int send_request(int sock, struct timeval *timeout, edg_wlpr_Request *request, edg_wlpr_Response *response) { int ret; char *buf = NULL; size_t buf_len; /* timeouts ?? */ ret = encode_request(request, &buf); if (ret) return ret; ret = edg_wlpr_Write(sock, timeout, buf, strlen(buf) + 1); free(buf); if (ret) return ret; ret = edg_wlpr_Read(sock, timeout, &buf, &buf_len); if (ret) return ret; ret = decode_response(buf, buf_len, response); free(buf); if (ret) return ret; return 0; }
int main(void) { isphdr_t *hdr; uint8_t buf[QENTRY_LEN]; int i; again: for (i = 0; i < QENTRY_LEN; i++) { int x; int r = scanf("%02x", &x); if (r == EOF) { break; } if (r != 1) { fprintf(stderr, "bad conversion at offset %d\n", i); break; } if (x > 0xff) { fprintf(stderr, "bogosity- x = 0x%x\n", x); break; } buf[i] = x; } if (i == 0) { return (0); } else if (i != QENTRY_LEN) { return (1); } hdr = (isphdr_t *) buf; switch (hdr->rqs_entry_type) { case RQSTYPE_RESPONSE: decode_response(buf); break; case RQSTYPE_T2RQS: decode_t2rqs(buf); break; case RQSTYPE_CTIO2: case RQSTYPE_CTIO3: decode_ctio2(buf); break; case RQSTYPE_CTIO7: decode_ctio7(buf); break; case RQSTYPE_T7RQS: decode_rqst7(buf); break; case RQSTYPE_A64_CONT: decode_a64_cont(buf); break; default: fprintf(stderr, "type 0x%x unknown\n", hdr->rqs_entry_type); break; } goto again; }