static void handler(void *user_data, v8_result_t *result) { const char *s; s = (const char *) user_data; if (result == NULL) { printf("%s V.8 negotiation failed\n", s); return; } printf("%s V.8 negotiation result:\n", s); printf(" Call function '%s'\n", v8_call_function_to_str(result->call_function)); printf(" Negotiated modulation '%s'\n", v8_modulation_to_str(result->negotiated_modulation)); printf(" Protocol '%s'\n", v8_protocol_to_str(result->protocol)); printf(" PSTN access '%s'\n", v8_pstn_access_to_str(result->pstn_access)); printf(" PCM modem availability '%s'\n", v8_pcm_modem_availability_to_str(result->pcm_modem_availability)); if (result->call_function == V8_CALL_V_SERIES && result->negotiated_modulation == V8_MOD_V90 && result->protocol == V8_PROTOCOL_LAPM_V42) { negotiations_ok++; } }
for (i = 0; i < 32; i++) { if ((modulation_schemes & (1 << i))) { span_log(&s->logging, SPAN_LOG_FLOW | SPAN_LOG_SUPPRESS_LABELLING, "%s%s", comma, v8_modulation_to_str(modulation_schemes & (1 << i))); comma = ", "; } } span_log(&s->logging, SPAN_LOG_FLOW | SPAN_LOG_SUPPRESS_LABELLING, " supported\n"); } /*- End of function --------------------------------------------------------*/ static const uint8_t *process_call_function(v8_state_t *s, const uint8_t *p) { s->result.call_function = (*p >> 5) & 0x07; span_log(&s->logging, SPAN_LOG_FLOW, "%s\n", v8_call_function_to_str(s->result.call_function)); return ++p; } /*- End of function --------------------------------------------------------*/ static const uint8_t *process_modulation_mode(v8_state_t *s, const uint8_t *p) { unsigned int far_end_modulations; /* Modulation mode octet */ far_end_modulations = 0; if (*p & 0x80) far_end_modulations |= V8_MOD_V34HALF; if (*p & 0x40) far_end_modulations |= V8_MOD_V34; if (*p & 0x20)
static void handler(void *user_data, v8_parms_t *result) { const char *s; s = (const char *) user_data; printf("%s ", s); switch (result->status) { case V8_STATUS_IN_PROGRESS: printf("V.8 negotiation in progress\n"); return; case V8_STATUS_V8_OFFERED: printf("V.8 offered by the other party\n"); break; case V8_STATUS_V8_CALL: printf("V.8 call negotiation successful\n"); break; case V8_STATUS_NON_V8_CALL: printf("Non-V.8 call negotiation successful\n"); break; case V8_STATUS_FAILED: printf("V.8 call negotiation failed\n"); return; default: printf("Unexpected V.8 status %d\n", result->status); break; } /*endswitch*/ printf(" Modem connect tone '%s' (%d)\n", modem_connect_tone_to_str(result->modem_connect_tone), result->modem_connect_tone); printf(" Call function '%s' (%d)\n", v8_call_function_to_str(result->call_function), result->call_function); printf(" Far end modulations 0x%X\n", result->modulations); printf(" Protocol '%s' (%d)\n", v8_protocol_to_str(result->protocol), result->protocol); printf(" PSTN access '%s' (%d)\n", v8_pstn_access_to_str(result->pstn_access), result->pstn_access); printf(" PCM modem availability '%s' (%d)\n", v8_pcm_modem_availability_to_str(result->pcm_modem_availability), result->pcm_modem_availability); if (result->t66 >= 0) printf(" T.66 '%s' (%d)\n", v8_t66_to_str(result->t66), result->t66); /*endif*/ if (result->nsf >= 0) printf(" NSF %d\n", result->nsf); /*endif*/ switch (result->status) { case V8_STATUS_V8_OFFERED: /* Edit the result information appropriately */ //result->call_function = V8_CALL_T30_TX; result->modulations &= (V8_MOD_V17 | V8_MOD_V21 //| V8_MOD_V22 //| V8_MOD_V23HDX //| V8_MOD_V23 //| V8_MOD_V26BIS //| V8_MOD_V26TER | V8_MOD_V27TER | V8_MOD_V29 //| V8_MOD_V32 | V8_MOD_V34HDX //| V8_MOD_V34 //| V8_MOD_V90 | V8_MOD_V92); break; case V8_STATUS_V8_CALL: if (result->call_function == V8_CALL_V_SERIES && result->protocol == V8_PROTOCOL_LAPM_V42) { negotiations_ok++; } /*endif*/ break; case V8_STATUS_NON_V8_CALL: negotiations_ok = 42; break; } /*endswitch*/ }