spandsp  0.0.6
private/t38_core.h
1 /*
2  * SpanDSP - a series of DSP components for telephony
3  *
4  * private/t38_core.h - An implementation of T.38, less the packet exchange part
5  *
6  * Written by Steve Underwood <steveu@coppice.org>
7  *
8  * Copyright (C) 2005 Steve Underwood
9  *
10  * All rights reserved.
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU Lesser General Public License version 2.1,
14  * as published by the Free Software Foundation.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with this program; if not, write to the Free Software
23  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24  */
25 
26 #if !defined(_SPANDSP_PRIVATE_T38_CORE_H_)
27 #define _SPANDSP_PRIVATE_T38_CORE_H_
28 
29 /*!
30  Core T.38 state, common to all modes of T.38.
31 */
33 {
34  /*! \brief Handler routine to transmit IFP packets generated by the T.38 protocol engine */
35  t38_tx_packet_handler_t *tx_packet_handler;
36  /*! \brief An opaque pointer passed to tx_packet_handler */
38 
39  /*! \brief Handler routine to process received indicator packets */
40  t38_rx_indicator_handler_t *rx_indicator_handler;
41  /*! \brief Handler routine to process received data packets */
42  t38_rx_data_handler_t *rx_data_handler;
43  /*! \brief Handler routine to process the missing packet condition */
44  t38_rx_missing_handler_t *rx_missing_handler;
45  /*! \brief An opaque pointer passed to any of the above receive handling routines */
46  void *rx_user_data;
47 
48  /*! NOTE - Bandwidth reduction shall only be done on suitable Phase C data, i.e., MH, MR
49  and - in the case of transcoding to JBIG - MMR. MMR and JBIG require reliable data
50  transport such as that provided by TCP. When transcoding is selected, it shall be
51  applied to every suitable page in a call. */
52 
53  /*! \brief Method 1: Local generation of TCF (required for use with TCP).
54  Method 2: Transfer of TCF is required for use with UDP (UDPTL or RTP).
55  Method 2 is not recommended for use with TCP. */
57 
58  /*! \brief The emitting gateway may indicate a preference for either UDP/UDPTL, or
59  UDP/RTP, or TCP for transport of T.38 IFP Packets. The receiving device
60  selects the transport protocol. */
62 
63  /*! \brief Indicates the capability to remove and insert fill bits in Phase C, non-ECM
64  data to reduce bandwidth in the packet network. */
66 
67  /*! \brief Indicates the ability to convert to/from MMR from/to the line format to
68  improve the compression of the data, and reduce the bandwidth, in the
69  packet network. */
71 
72  /*! \brief Indicates the ability to convert to/from JBIG to reduce bandwidth. */
74 
75  /*! \brief For UDP (UDPTL or RTP) modes, this option indicates the maximum
76  number of octets that can be stored on the remote device before an
77  overflow condition occurs. It is the responsibility of the transmitting
78  application to limit the transfer rate to prevent an overflow. The
79  negotiated data rate should be used to determine the rate at which
80  data is being removed from the buffer. */
82 
83  /*! \brief This option indicates the maximum size of a UDPTL packet or the
84  maximum size of the payload within an RTP packet that can be accepted
85  by the remote device. */
87 
88  /*! \brief This is the version number of ITU-T Rec. T.38. New versions shall be
89  compatible with previous versions. */
91 
92  /*! \brief Allow time for TEP playout */
94 
95  /*! \brief The fastest data rate supported by the T.38 channel. */
97 
98  /*! \brief Pace transmission */
100 
101  /*! \brief TRUE if IFP packet sequence numbers are relevant. For some transports, like TPKT
102  over TCP they are not relevent. */
104 
105  /*! \brief The number of times each packet type will be sent (low byte). The
106  depth of redundancy (2nd byte). Higher numbers may increase reliability
107  for UDP transmission. Zero is valid for the indicator packet category,
108  to suppress all indicator packets (typicaly for TCP transmission). */
110 
111  /*! \brief The sequence number for the next packet to be transmitted */
113  /*! \brief The sequence number expected in the next received packet */
115 
116  /*! \brief The current receive indicator - i.e. the last indicator received */
118  /*! \brief The current receive data type - i.e. the last data type received */
120  /*! \brief The current receive field type - i.e. the last field_type received */
122  /*! \brief The current transmit indicator - i.e. the last indicator transmitted */
124  /*! \brief The bit rate for V.34 operation */
125  int v34_rate;
126 
127  /*! A count of missing receive packets. This count might not be accurate if the
128  received packet numbers jump wildly. */
130 
131  /*! \brief Error and flow logging control */
133 };
134 
135 #endif
136 /*- End of file ------------------------------------------------------------*/
t38_data_field_t::field_type
int field_type
Definition: t38_core.h:192
t38_set_t38_version
void t38_set_t38_version(t38_core_state_t *s, int t38_version)
Definition: t38_core.c:1034
t38_core_send_flags_delay
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:932
t38_core_get_logging_state
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:1076
t38_core_state_s::fastest_image_data_rate
int fastest_image_data_rate
The fastest data rate supported by the T.38 channel.
Definition: private/t38_core.h:96
t38_set_mmr_transcoding
void t38_set_mmr_transcoding(t38_core_state_t *s, int mmr_transcoding)
Definition: t38_core.c:1010
t38_data_type_to_str
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:148
t38_core_state_s::v34_rate
int v34_rate
The bit rate for V.34 operation.
Definition: private/t38_core.h:125
t38_core_state_s::current_rx_field_type
int current_rx_field_type
The current receive field type - i.e. the last field_type received.
Definition: private/t38_core.h:121
t38_jm_to_str
const char * t38_jm_to_str(const uint8_t *data, int len)
Convert a JM message code to text description.
Definition: t38_core.c:241
span_log_test
int span_log_test(logging_state_t *s, int level)
Test if logging of a specified severity level is enabled.
Definition: logging.c:76
t38_set_jbig_transcoding
void t38_set_jbig_transcoding(t38_core_state_t *s, int jbig_transcoding)
Definition: t38_core.c:1016
t38_core_state_s::tx_packet_handler
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:35
t35_decode
int t35_decode(const uint8_t *msg, int len, const char **country, const char **vendor, const char **model)
Decode an NSF field.
Definition: t35.c:909
t38_core_state_s::rx_missing_handler
t38_rx_missing_handler_t * rx_missing_handler
Handler routine to process the missing packet condition.
Definition: private/t38_core.h:44
t35_real_country_code
int t35_real_country_code(int country_code, int country_code_extension)
Resolve a T.35 country code with bit reversal resolution.
Definition: t35.c:791
t38_core_state_s::allow_for_tep
int allow_for_tep
Allow time for TEP playout.
Definition: private/t38_core.h:93
t38_core_state_s
Definition: private/t38_core.h:33
T38_PACKET_CATEGORY_CONTROL_DATA
@ T38_PACKET_CATEGORY_CONTROL_DATA
Control data packet.
Definition: t38_core.h:176
t38_core_state_s::check_sequence_numbers
int check_sequence_numbers
TRUE if IFP packet sequence numbers are relevant. For some transports, like TPKT over TCP they are no...
Definition: private/t38_core.h:103
t38_core_free
int t38_core_free(t38_core_state_t *s)
Free a signaling tone transmitter context.
Definition: t38_core.c:1157
T38_PACKET_CATEGORY_INDICATOR
@ T38_PACKET_CATEGORY_INDICATOR
Indicator packet.
Definition: t38_core.h:174
t38_core_state_s::rx_expected_seq_no
int rx_expected_seq_no
The sequence number expected in the next received packet.
Definition: private/t38_core.h:114
t38_data_field_t
Definition: t38_core.h:190
t35_real_country_code_to_str
const char * t35_real_country_code_to_str(int country_code, int country_code_extension)
Decode a T.35 country code to a country name, with bit reversal resolution.
Definition: t35.c:843
t38_set_redundancy_control
void t38_set_redundancy_control(t38_core_state_t *s, int category, int setting)
Send a data packet.
Definition: t38_core.c:1058
t38_core_init
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:1102
SPAN_DECLARE_NONSTD
SPAN_DECLARE_NONSTD(int) async_tx_get_bit(void *user_data)
Get the next bit of a transmitted serial bit stream.
t35_country_code_to_str
const char * t35_country_code_to_str(int country_code, int country_code_extension)
Decode a T.35 country code to a country name.
Definition: t35.c:853
t38_field_type_to_str
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:187
t38_core_state_s::data_transport_protocol
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:61
t38_core_state_s::t38_version
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:90
t38_core_state_s::current_tx_indicator
int current_tx_indicator
The current transmit indicator - i.e. the last indicator transmitted.
Definition: private/t38_core.h:123
t38_core_state_s::category_control
int category_control[5]
The number of times each packet type will be sent (low byte). The depth of redundancy (2nd byte)....
Definition: private/t38_core.h:109
T38_PACKET_CATEGORY_IMAGE_DATA
@ T38_PACKET_CATEGORY_IMAGE_DATA
Image data packet.
Definition: t38_core.h:180
t38_set_fill_bit_removal
void t38_set_fill_bit_removal(t38_core_state_t *s, int fill_bit_removal)
Definition: t38_core.c:1004
t38_core_state_s::rx_user_data
void * rx_user_data
An opaque pointer passed to any of the above receive handling routines.
Definition: private/t38_core.h:46
t38_core_state_s::current_rx_data_type
int current_rx_data_type
The current receive data type - i.e. the last data type received.
Definition: private/t38_core.h:119
t38_core_restart
int t38_core_restart(t38_core_state_t *s)
Restart a T.38 core context.
Definition: t38_core.c:1082
t38_core_state_s::fill_bit_removal
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:65
t38_core_send_indicator
int t38_core_send_indicator(t38_core_state_t *s, int indicator)
Send an indicator packet.
Definition: t38_core.c:889
t38_set_data_transport_protocol
void t38_set_data_transport_protocol(t38_core_state_t *s, int data_transport_protocol)
Definition: t38_core.c:998
t38_core_state_s::mmr_transcoding
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:70
t38_core_state_s::jbig_transcoding
int jbig_transcoding
Indicates the ability to convert to/from JBIG to reduce bandwidth.
Definition: private/t38_core.h:73
t38_core_state_s::data_rate_management_method
int data_rate_management_method
Method 1: Local generation of TCF (required for use with TCP). Method 2: Transfer of TCF is required ...
Definition: private/t38_core.h:56
t38_indicator_to_str
const char * t38_indicator_to_str(int indicator)
Convert the code for an indicator to a short text name.
Definition: t38_core.c:93
bit_operations.h
t38_cm_profile_to_str
const char * t38_cm_profile_to_str(int profile)
Convert the code for a CM profile code to text description.
Definition: t38_core.c:220
t38_core_state_s::current_rx_indicator
int current_rx_indicator
The current receive indicator - i.e. the last indicator received.
Definition: private/t38_core.h:117
t38_core_release
int t38_core_release(t38_core_state_t *s)
Release a signaling tone transmitter context.
Definition: t38_core.c:1151
T38_PACKET_CATEGORY_CONTROL_DATA_END
@ T38_PACKET_CATEGORY_CONTROL_DATA_END
Terminating control data packet.
Definition: t38_core.h:178
span_log
int span_log(logging_state_t *s, int level, const char *format,...)
Generate a log entry.
Definition: logging.c:84
t38_core_state_s::logging
logging_state_t logging
Error and flow logging control.
Definition: private/t38_core.h:132
t38_core.h
T38_PACKET_CATEGORY_IMAGE_DATA_END
@ T38_PACKET_CATEGORY_IMAGE_DATA_END
Terminating image data packet.
Definition: t38_core.h:182
t38_core_state_s::rx_indicator_handler
t38_rx_indicator_handler_t * rx_indicator_handler
Handler routine to process received indicator packets.
Definition: private/t38_core.h:40
t38_set_data_rate_management_method
void t38_set_data_rate_management_method(t38_core_state_t *s, int method)
Definition: t38_core.c:992
t38_set_sequence_number_handling
void t38_set_sequence_number_handling(t38_core_state_t *s, int check)
Definition: t38_core.c:1040
t38_core_state_s::tx_seq_no
int tx_seq_no
The sequence number for the next packet to be transmitted.
Definition: private/t38_core.h:112
t38_core_state_s::missing_packets
int missing_packets
Definition: private/t38_core.h:129
logging.h
t38_core_state_s::rx_data_handler
t38_rx_data_handler_t * rx_data_handler
Handler routine to process received data packets.
Definition: private/t38_core.h:42
span_log_buf
int span_log_buf(logging_state_t *s, int level, const char *tag, const uint8_t *buf, int len)
Generate a log entry displaying the contents of a buffer.
Definition: logging.c:158
t38_set_max_buffer_size
void t38_set_max_buffer_size(t38_core_state_t *s, int max_buffer_size)
Definition: t38_core.c:1022
t38_core_state_s::tx_packet_user_data
void * tx_packet_user_data
An opaque pointer passed to tx_packet_handler.
Definition: private/t38_core.h:37
t38_core_send_training_delay
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:940
t38_data_field_t::field
const uint8_t * field
Definition: t38_core.h:194
t38_data_field_t::field_len
int field_len
Definition: t38_core.h:196
t38_set_max_datagram_size
void t38_set_max_datagram_size(t38_core_state_t *s, int max_datagram_size)
Definition: t38_core.c:1028
t38_core_state_s::max_buffer_size
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:81
t38_core_state_s::pace_transmission
int pace_transmission
Pace transmission.
Definition: private/t38_core.h:99
logging_state_s
Definition: private/logging.h:34
t38_v34rate_to_bps
int t38_v34rate_to_bps(const uint8_t *data, int len)
Convert a V34rate message to an actual bit rate.
Definition: t38_core.c:272
t38_core_send_data
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:948
t38_set_tep_handling
void t38_set_tep_handling(t38_core_state_t *s, int allow_for_tep)
Definition: t38_core.c:1052
t38_core_state_s::max_datagram_size
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:86
t38_core_send_data_multi_field
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:972