void fax_log_rx_parameters(t30_state_t *s, const char *tag) { const char *u; if ((u = t30_get_rx_ident(s))) printf("%s: Remote ident '%s'\n", tag, u); if ((u = t30_get_rx_sub_address(s))) printf("%s: Remote sub-address '%s'\n", tag, u); if ((u = t30_get_rx_polled_sub_address(s))) printf("%s: Remote polled sub-address '%s'\n", tag, u); if ((u = t30_get_rx_selective_polling_address(s))) printf("%s: Remote selective polling address '%s'\n", tag, u); if ((u = t30_get_rx_sender_ident(s))) printf("%s: Remote sender ident '%s'\n", tag, u); if ((u = t30_get_rx_password(s))) printf("%s: Remote password '%s'\n", tag, u); if ((u = t30_get_rx_country(s))) printf("%s: Remote was made in '%s'\n", tag, u); if ((u = t30_get_rx_vendor(s))) printf("%s: Remote was made by '%s'\n", tag, u); if ((u = t30_get_rx_model(s))) printf("%s: Remote is model '%s'\n", tag, u); }
static int phase_b_handler(t30_state_t *s, void *user_data, int result) { int i; int ch; int status; int len; char tag[20]; const char *u; const uint8_t *v; i = (int) (intptr_t) user_data; ch = i + 'A'; snprintf(tag, sizeof(tag), "%c: Phase B", ch); printf("%c: Phase B handler - (0x%X) %s\n", ch, result, t30_frametype(result)); fax_log_rx_parameters(s, tag); status = T30_ERR_OK; if ((u = t30_get_rx_ident(s))) { printf("%c: Phase B remote ident '%s'\n", ch, u); if (expected_rx_info[i].ident[0] && strcmp(expected_rx_info[i].ident, u)) { printf("%c: Phase B: remote ident incorrect! - expected '%s'\n", ch, expected_rx_info[i].ident); status = T30_ERR_IDENT_UNACCEPTABLE; } } else { if (expected_rx_info[i].ident[0]) { printf("%c: Phase B: remote ident missing!\n", ch); status = T30_ERR_IDENT_UNACCEPTABLE; } } if ((u = t30_get_rx_sub_address(s))) { printf("%c: Phase B: remote sub-address '%s'\n", ch, u); if (expected_rx_info[i].sub_address[0] && strcmp(expected_rx_info[i].sub_address, u)) { printf("%c: Phase B: remote sub-address incorrect! - expected '%s'\n", ch, expected_rx_info[i].sub_address); status = T30_ERR_SUB_UNACCEPTABLE; } } else { if (expected_rx_info[i].sub_address[0]) { printf("%c: Phase B: remote sub-address missing!\n", ch); status = T30_ERR_SUB_UNACCEPTABLE; } } if ((u = t30_get_rx_polled_sub_address(s))) { printf("%c: Phase B: remote polled sub-address '%s'\n", ch, u); if (expected_rx_info[i].polled_sub_address[0] && strcmp(expected_rx_info[i].polled_sub_address, u)) { printf("%c: Phase B: remote polled sub-address incorrect! - expected '%s'\n", ch, expected_rx_info[i].polled_sub_address); status = T30_ERR_PSA_UNACCEPTABLE; } } else { if (expected_rx_info[i].polled_sub_address[0]) { printf("%c: Phase B: remote polled sub-address missing!\n", ch); status = T30_ERR_PSA_UNACCEPTABLE; } } if ((u = t30_get_rx_selective_polling_address(s))) { printf("%c: Phase B: remote selective polling address '%s'\n", ch, u); if (expected_rx_info[i].selective_polling_address[0] && strcmp(expected_rx_info[i].selective_polling_address, u)) { printf("%c: Phase B: remote selective polling address incorrect! - expected '%s'\n", ch, expected_rx_info[i].selective_polling_address); status = T30_ERR_SEP_UNACCEPTABLE; } } else { if (expected_rx_info[i].selective_polling_address[0]) { printf("%c: Phase B: remote selective polling address missing!\n", ch); status = T30_ERR_SEP_UNACCEPTABLE; } } if ((u = t30_get_rx_sender_ident(s))) { printf("%c: Phase B: remote sender ident '%s'\n", ch, u); if (expected_rx_info[i].sender_ident[0] && strcmp(expected_rx_info[i].sender_ident, u)) { printf("%c: Phase B: remote sender ident incorrect! - expected '%s'\n", ch, expected_rx_info[i].sender_ident); status = T30_ERR_SID_UNACCEPTABLE; } } else { if (expected_rx_info[i].sender_ident[0]) { printf("%c: Phase B: remote sender ident missing!\n", ch); status = T30_ERR_SID_UNACCEPTABLE; } } if ((u = t30_get_rx_password(s))) { printf("%c: Phase B: remote password '%s'\n", ch, u); if (expected_rx_info[i].password[0] && strcmp(expected_rx_info[i].password, u)) { printf("%c: Phase B: remote password incorrect! - expected '%s'\n", ch, expected_rx_info[i].password); status = T30_ERR_PWD_UNACCEPTABLE; } } else { if (expected_rx_info[i].password[0]) { printf("%c: Phase B: remote password missing!\n", ch); status = T30_ERR_PWD_UNACCEPTABLE; } } if ((len = t30_get_rx_nsf(s, &v))) { printf("%c: Phase B: NSF %d bytes\n", ch, len); if (expected_rx_info[i].nsf_len && (expected_rx_info[i].nsf_len != len || memcmp(expected_rx_info[i].nsf, v, len))) { printf("%c: Phase B: remote NSF incorrect! - expected %u bytes\n", ch, (unsigned int) expected_rx_info[i].nsf_len); } } else { if (expected_rx_info[i].nsf_len) { printf("%c: Phase B: remote NSF missing! - expected %u bytes\n", ch, (unsigned int) expected_rx_info[i].nsf_len); } } if ((len = t30_get_rx_nsc(s, &v))) { printf("%c: Phase B: NSC %d bytes\n", ch, len); if (expected_rx_info[i].nsc_len && (expected_rx_info[i].nsc_len != len || memcmp(expected_rx_info[i].nsc, v, len))) { printf("%c: Phase B: remote NSC incorrect! - expected %u bytes\n", ch, (unsigned int) expected_rx_info[i].nsc_len); } } else { if (expected_rx_info[i].nsc_len) { printf("%c: Phase B: remote NSC missing! - expected %u bytes\n", ch, (unsigned int) expected_rx_info[i].nsc_len); } } if ((len = t30_get_rx_nss(s, &v))) { printf("%c: Phase B: NSS %d bytes\n", ch, len); if (expected_rx_info[i].nss_len && (expected_rx_info[i].nss_len != len || memcmp(expected_rx_info[i].nss, v, len))) { printf("%c: Phase B: remote NSS incorrect! - expected %u bytes\n", ch, (unsigned int) expected_rx_info[i].nss_len); } } else { if (expected_rx_info[i].nss_len) { printf("%c: Phase B: remote NSS missing! - expected %u bytes\n", ch, (unsigned int) expected_rx_info[i].nsf_len); } } return status; }