28 #if !defined(_SPANDSP_T38_CORE_H_) 29 #define _SPANDSP_T38_CORE_H_ 75 T38_IND_NO_SIGNAL = 0,
79 T38_IND_V27TER_2400_TRAINING,
80 T38_IND_V27TER_4800_TRAINING,
81 T38_IND_V29_7200_TRAINING,
82 T38_IND_V29_9600_TRAINING,
83 T38_IND_V17_7200_SHORT_TRAINING,
84 T38_IND_V17_7200_LONG_TRAINING,
85 T38_IND_V17_9600_SHORT_TRAINING,
86 T38_IND_V17_9600_LONG_TRAINING,
87 T38_IND_V17_12000_SHORT_TRAINING,
88 T38_IND_V17_12000_LONG_TRAINING,
89 T38_IND_V17_14400_SHORT_TRAINING,
90 T38_IND_V17_14400_LONG_TRAINING,
93 T38_IND_V34_CNTL_CHANNEL_1200,
94 T38_IND_V34_PRI_CHANNEL,
95 T38_IND_V34_CC_RETRAIN,
96 T38_IND_V33_12000_TRAINING,
97 T38_IND_V33_14400_TRAINING
105 T38_DATA_V27TER_2400,
106 T38_DATA_V27TER_4800,
114 T38_DATA_V34_PRI_RATE,
115 T38_DATA_V34_CC_1200,
124 T38_FIELD_HDLC_DATA = 0,
125 T38_FIELD_HDLC_SIG_END,
126 T38_FIELD_HDLC_FCS_OK,
127 T38_FIELD_HDLC_FCS_BAD,
128 T38_FIELD_HDLC_FCS_OK_SIG_END,
129 T38_FIELD_HDLC_FCS_BAD_SIG_END,
130 T38_FIELD_T4_NON_ECM_DATA,
131 T38_FIELD_T4_NON_ECM_SIG_END,
132 T38_FIELD_CM_MESSAGE,
133 T38_FIELD_JM_MESSAGE,
134 T38_FIELD_CI_MESSAGE,
141 T38_FIELD_CLASS_NONE = 0,
142 T38_FIELD_CLASS_HDLC,
143 T38_FIELD_CLASS_NON_ECM
149 T38_TYPE_OF_MSG_T30_INDICATOR = 0,
150 T38_TYPE_OF_MSG_T30_DATA
156 T38_TRANSPORT_UDPTL = 0,
159 T38_TRANSPORT_TCP_TPKT
165 T38_DATA_RATE_MANAGEMENT_LOCAL_TCF = 1,
166 T38_DATA_RATE_MANAGEMENT_TRANSFERRED_TCF = 2
197 } t38_chunking_mode_t;
199 #define T38_RX_BUF_LEN 2048 200 #define T38_TX_BUF_LEN 16384 218 typedef int (*t38_tx_packet_handler_t)(
t38_core_state_t *s,
void *user_data,
const uint8_t *buf,
int len,
int count);
220 typedef int (*t38_rx_indicator_handler_t)(
t38_core_state_t *s,
void *user_data,
int indicator);
221 typedef int (*t38_rx_data_handler_t)(
t38_core_state_t *s,
void *user_data,
int data_type,
int field_type,
const uint8_t *buf,
int len);
222 typedef int (*t38_rx_missing_handler_t)(
t38_core_state_t *s,
void *user_data,
int rx_seq_no,
int expected_seq_no);
224 #if defined(__cplusplus) 253 SPAN_DECLARE(
const char *)
t38_jm_to_str(
const uint8_t *data,
int len);
368 SPAN_DECLARE(
void) t38_set_fastest_image_data_rate(
t38_core_state_t *s,
int max_rate);
445 #if defined(__cplusplus) enum t38_field_types_e t38_field_types_t
t38_chunking_mode_e
Definition: t38_core.h:185
void t38_set_sequence_number_handling(t38_core_state_t *s, bool check)
Definition: t38_core.c:1142
enum t38_transport_types_e t38_transport_types_t
int t38_core_restart(t38_core_state_t *s)
Restart a T.38 core context.
Definition: t38_core.c:1196
t38_rx_data_handler_t rx_data_handler
Handler routine to process received data packets.
Definition: private/t38_core.h:44
int data_transport_protocol
The emitting gateway may indicate a preference for either UDP/UDPTL, or UDP/RTP, or TCP for transport...
Definition: private/t38_core.h:70
Image data packet.
Definition: t38_core.h:180
int t38_core_send_indicator(t38_core_state_t *s, int indicator)
Send an indicator packet.
Definition: t38_core.c:979
t30_indicator_types_e
Definition: t38_core.h:73
enum t38_message_types_e t38_message_types_t
int t38_v34rate_to_bps(const uint8_t *data, int len)
Convert a V34rate message to an actual bit rate.
Definition: t38_core.c:292
t38_transport_types_e
Definition: t38_core.h:154
Terminating control data packet.
Definition: t38_core.h:178
const char * t38_field_type_to_str(int field_type)
Convert the code for a type of data field to a short text name.
Definition: t38_core.c:201
void t38_set_t38_version(t38_core_state_t *s, int t38_version)
Definition: t38_core.c:1136
void t38_set_tx_packet_interval(t38_core_state_t *s, int microseconds)
Definition: t38_core.c:1178
Definition: t38_core.h:203
Terminating image data packet.
Definition: t38_core.h:182
int t38_get_tx_packet_interval(t38_core_state_t *s)
Definition: t38_core.c:1184
int max_datagram_size
This option indicates the maximum size of a UDPTL packet or the maximum size of the payload within an...
Definition: private/t38_core.h:95
void t38_set_tep_handling(t38_core_state_t *s, bool allow_for_tep)
Definition: t38_core.c:1154
void * tx_packet_user_data
An opaque pointer passed to tx_packet_handler.
Definition: private/t38_core.h:39
Allow for the time TEP takes when playing out the data.
Definition: t38_core.h:192
const char * t38_jm_to_str(const uint8_t *data, int len)
Convert a JM message code to text description.
Definition: t38_core.c:257
int t38_version
This is the version number of ITU-T Rec. T.38. New versions shall be compatible with previous version...
Definition: private/t38_core.h:99
t38_field_classes_e
Definition: t38_core.h:139
int jbig_transcoding
Indicates the ability to convert to/from JBIG to reduce bandwidth.
Definition: private/t38_core.h:82
void t38_set_jbig_transcoding(t38_core_state_t *s, bool jbig_transcoding)
Definition: t38_core.c:1118
logging_state_t * t38_core_get_logging_state(t38_core_state_t *s)
Get a pointer to the logging context associated with a T.38 context.
Definition: t38_core.c:1190
const char * t38_data_type_to_str(int data_type)
Convert the code for a type of data to a short text name.
Definition: t38_core.c:161
void * rx_user_data
An opaque pointer passed to any of the above receive handling routines.
Definition: private/t38_core.h:48
int field_type
Definition: t38_core.h:206
enum t38_packet_categories_e t38_packet_categories_t
t38_tx_packet_handler_t tx_packet_handler
Handler routine to transmit IFP packets generated by the T.38 protocol engine.
Definition: private/t38_core.h:37
int field_len
Definition: t38_core.h:210
const char * t38_indicator_to_str(int indicator)
Convert the code for an indicator to a short text name.
Definition: t38_core.c:105
Control data packet.
Definition: t38_core.h:176
enum t30_indicator_types_e t30_indicator_types_t
void t38_set_mmr_transcoding(t38_core_state_t *s, bool mmr_transcoding)
Definition: t38_core.c:1112
t38_data_rate_management_types_e
Definition: t38_core.h:163
int t38_core_send_flags_delay(t38_core_state_t *s, int indicator)
Find the delay to allow for HDLC flags after sending an indicator.
Definition: t38_core.c:1028
int pace_transmission
Pace transmission.
Definition: private/t38_core.h:108
void t38_set_fill_bit_removal(t38_core_state_t *s, bool fill_bit_removal)
Definition: t38_core.c:1106
void t38_set_max_buffer_size(t38_core_state_t *s, int max_buffer_size)
Definition: t38_core.c:1124
const uint8_t * field
Definition: t38_core.h:208
t38_packet_categories_e
Definition: t38_core.h:171
int fill_bit_removal
Indicates the capability to remove and insert fill bits in Phase C, non-ECM data to reduce bandwidth ...
Definition: private/t38_core.h:74
Definition: private/logging.h:33
int t38_core_free(t38_core_state_t *s)
Free a signaling tone transmitter context.
Definition: t38_core.c:1274
t38_rx_indicator_handler_t rx_indicator_handler
Handler routine to process received indicator packets.
Definition: private/t38_core.h:42
void t38_set_redundancy_control(t38_core_state_t *s, int category, int setting)
Send a data packet.
Definition: t38_core.c:1160
const char * t38_cm_profile_to_str(int profile)
Convert the code for a CM profile code to text description.
Definition: t38_core.c:235
int mmr_transcoding
Indicates the ability to convert to/from MMR from/to the line format to improve the compression of th...
Definition: private/t38_core.h:79
int max_buffer_size
For UDP (UDPTL or RTP) modes, this option indicates the maximum number of octets that can be stored o...
Definition: private/t38_core.h:90
int t38_core_rx_ifp_stream(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t log_seq_no)
Process a received T.38 IFP packet from a reliable stream (e.g. TCP).
Definition: t38_core.c:356
void t38_set_data_rate_management_method(t38_core_state_t *s, int method)
Definition: t38_core.c:1094
t38_core_state_t * t38_core_init(t38_core_state_t *s, t38_rx_indicator_handler_t rx_indicator_handler, t38_rx_data_handler_t rx_data_handler, t38_rx_missing_handler_t rx_missing_handler, void *rx_user_data, t38_tx_packet_handler_t tx_packet_handler, void *tx_packet_user_data)
Initialise a T.38 core context.
Definition: t38_core.c:1216
int t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no)
Process a received T.38 IFP packet from an unreliable packet stream (e.g. UDPTL or RTP)...
Definition: t38_core.c:679
enum t38_field_classes_e t38_field_classes_t
enum t38_data_rate_management_types_e t38_data_rate_management_types_t
int allow_for_tep
Allow time for TEP playout.
Definition: private/t38_core.h:102
Send an indicator every 2s when idle.
Definition: t38_core.h:196
Send whole HDLC frames, rather than break them into mant packets for smooth analogue playout...
Definition: t38_core.h:190
t38_field_types_e
Definition: t38_core.h:122
void t38_set_data_transport_protocol(t38_core_state_t *s, int data_transport_protocol)
Definition: t38_core.c:1100
void t38_set_max_datagram_size(t38_core_state_t *s, int max_datagram_size)
Definition: t38_core.c:1130
int t38_core_send_training_delay(t38_core_state_t *s, int indicator)
Find the delay to allow for modem training after sending an indicator.
Definition: t38_core.c:1037
Definition: private/t38_core.h:34
t38_rx_missing_handler_t rx_missing_handler
Handler routine to process the missing packet condition.
Definition: private/t38_core.h:46
t38_message_types_e
Definition: t38_core.h:147
int t38_core_release(t38_core_state_t *s)
Release a signaling tone transmitter context.
Definition: t38_core.c:1268
int t38_core_send_data_multi_field(t38_core_state_t *s, int data_type, const t38_data_field_t field[], int fields, int category)
Send a data packet.
Definition: t38_core.c:1072
t38_data_types_e
Definition: t38_core.h:101
Send regular indicators when idle, rather than a single shot as the idle period begins.
Definition: t38_core.h:194
Indicator packet.
Definition: t38_core.h:174
enum t38_data_types_e t38_data_types_t
int t38_core_send_data(t38_core_state_t *s, int data_type, int field_type, const uint8_t field[], int field_len, int category)
Send a data packet.
Definition: t38_core.c:1046
The FCS at the end of an HDLC block can be send with the last chunk of the packet, or as a separate packet.
Definition: t38_core.h:188