ROHC compression/decompression library
|
ROHC compression routines. More...
#include "rohc_comp.h"
#include "rohc_traces.h"
#include "rtp.h"
#include <stdbool.h>
#include <assert.h>
Functions | |
void | c_destroy_contexts (struct rohc_comp *comp) |
Destroy all the compression contexts in the context array. | |
int | c_create_contexts (struct rohc_comp *comp) |
Create the array of compression contexts. | |
int | c_alloc_contexts (struct rohc_comp *comp, int size) |
Allocate memory for the array of compression contexts. | |
struct rohc_comp * | rohc_alloc_compressor (int max_cid, int jam_use, int adapt_size, int encap_size) |
Create one ROHC compressor. | |
void | rohc_free_compressor (struct rohc_comp *comp) |
Destroy one ROHC compressor. | |
int | rohc_compress (struct rohc_comp *comp, unsigned char *ibuf, int isize, unsigned char *obuf, int osize) |
Compress a ROHC packet. | |
void | rohc_activate_profile (struct rohc_comp *comp, int profile) |
Activate a profile for a compressor. | |
int | rohc_c_using_small_cid (struct rohc_comp *comp) |
Whether the compressor uses small CID or not. | |
void | rohc_c_set_header (struct rohc_comp *comp, int header) |
Set the maximal header size. The maximal header size is ignored for the moment. | |
void | rohc_c_set_mrru (struct rohc_comp *comp, int value) |
Set the Maximum Reconstructed Reception Unit (MRRU). The MRRU is ignored for the moment. | |
void | rohc_c_set_max_cid (struct rohc_comp *comp, int value) |
Set the maximal CID value the compressor should use. | |
void | rohc_c_set_large_cid (struct rohc_comp *comp, int large_cid) |
Tell the compressor to use large CIDs. | |
void | rohc_c_set_enable (struct rohc_comp *comp, int enable) |
Enable the ROHC compressor. | |
int | rohc_c_is_enabled (struct rohc_comp *comp) |
Whether the ROHC compressor is enabled or not. | |
int | rohc_c_info (char *buffer) |
Get information about available compression profiles. | |
int | rohc_c_statistics (struct rohc_comp *comp, unsigned int indent, char *buffer) |
Get information about a ROHC compressor. | |
int | rohc_c_context (struct rohc_comp *comp, int cid, unsigned int indent, char *buffer) |
Get information about a compression context. | |
struct c_profile * | c_get_profile_from_id (struct rohc_comp *comp, int profile_id) |
Find out a ROHC profile given a profile ID. | |
boolean | c_is_in_list (struct c_profile *profile, int port) |
Check whether an UDP port is associated with a given profile or not. | |
struct c_profile * | c_get_profile_from_packet (struct rohc_comp *comp, struct ip_packet *outer_ip, struct ip_packet *inner_ip, int protocol) |
Find out a ROHC profile given an IP protocol ID. | |
struct c_context * | c_create_context (struct rohc_comp *comp, struct c_profile *profile, struct ip_packet ip) |
Create a compression context. | |
struct c_context * | c_find_context (struct rohc_comp *comp, struct c_profile *profile, struct ip_packet ip) |
Find a compression context given a profile and an IP packet. | |
struct c_context * | c_get_context (struct rohc_comp *comp, int cid) |
Find out a context given its CID. | |
void | c_piggyback_feedback (struct rohc_comp *comp, unsigned char *feedback, int size) |
Add a feedback packet to the next outgoing ROHC packet (piggybacking) | |
int | rohc_feedback_flush (struct rohc_comp *comp, unsigned char *obuf, int osize) |
Send as much feedback data as possible. | |
void | c_deliver_feedback (struct rohc_comp *comp, unsigned char *packet, int size) |
Callback called by a decompressor to deliver a feedback packet to the compressor. | |
Variables | |
struct c_profile c_rtp_profile c_udp_profile c_udp_lite_profile c_ip_profile | c_uncompressed_profile |
Define the compression part of the Uncompressed profile as described in the RFC 3095. | |
struct c_profile * | c_profiles [C_NUM_PROFILES] |
The compression parts of the ROHC profiles. |
ROHC compression routines.
int c_alloc_contexts | ( | struct rohc_comp * | comp, |
int | size | ||
) |
Allocate memory for the array of compression contexts.
comp | The ROHC compressor |
size | The size of the context array (maximum: comp->medium.max_cid + 1) |
References c_create_wlsb(), rohc_comp::contexts, c_context::header_16_compressed, c_context::header_16_uncompressed, medium::max_cid, rohc_comp::medium, rohc_comp::num_contexts, rohc_debugf, c_context::total_16_compressed, c_context::total_16_uncompressed, and zfree.
Referenced by c_create_context(), and c_create_contexts().
struct c_context* c_create_context | ( | struct rohc_comp * | comp, |
struct c_profile * | profile, | ||
struct ip_packet | ip | ||
) | [read] |
Create a compression context.
comp | The ROHC compressor |
profile | The profile to associate the context with |
ip | The IP packet to initialize the context |
References c_alloc_contexts(), c_context::cid, c_context::compressor, rohc_comp::contexts, c_profile::create, c_profile::destroy, c_context::first_used, c_context::header_compressed_size, c_context::header_last_compressed_size, c_context::header_last_uncompressed_size, c_context::header_uncompressed_size, IR, c_context::latest_used, c_context::mode, rohc_comp::num_contexts, rohc_comp::num_contexts_used, c_context::num_recv_feedbacks, c_context::num_sent_ir, c_context::num_sent_ir_dyn, c_context::num_sent_packets, c_context::profile, rohc_debugf, c_context::state, c_context::total_compressed_size, c_context::total_last_compressed_size, c_context::total_last_uncompressed_size, c_context::total_uncompressed_size, U_MODE, and c_context::used.
Referenced by rohc_compress().
int c_create_contexts | ( | struct rohc_comp * | comp | ) |
Create the array of compression contexts.
comp | The ROHC compressor |
References c_alloc_contexts(), rohc_comp::contexts, rohc_comp::num_contexts, and rohc_comp::num_contexts_used.
Referenced by rohc_alloc_compressor().
void c_deliver_feedback | ( | struct rohc_comp * | comp, |
unsigned char * | packet, | ||
int | size | ||
) |
Callback called by a decompressor to deliver a feedback packet to the compressor.
When feedback is received by the decompressor, this function is called and delivers the feedback to the right profile/context of the compressor.
comp | The ROHC compressor |
packet | The feedback data |
size | The length of the feedback packet |
References c_feedback::acktype, c_get_context(), c_feedback::cid, medium::cid_type, d_decode_add_cid(), d_is_add_cid(), d_sdvalue_decode(), d_sdvalue_size(), c_feedback::data, c_profile::feedback, rohc_comp::medium, c_context::num_recv_feedbacks, c_context::profile, rohc_debugf, c_feedback::size, c_feedback::specific_offset, c_feedback::specific_size, c_feedback::type, and zfree.
void c_destroy_contexts | ( | struct rohc_comp * | comp | ) |
Destroy all the compression contexts in the context array.
The profile-specific contexts are also destroyed.
comp | The ROHC compressor |
References c_destroy_wlsb(), rohc_comp::contexts, c_profile::destroy, c_context::header_16_compressed, c_context::header_16_uncompressed, rohc_comp::num_contexts, rohc_comp::num_contexts_used, c_context::profile, c_context::total_16_compressed, c_context::total_16_uncompressed, c_context::used, and zfree.
Referenced by rohc_free_compressor().
struct c_context* c_find_context | ( | struct rohc_comp * | comp, |
struct c_profile * | profile, | ||
struct ip_packet | ip | ||
) | [read] |
Find a compression context given a profile and an IP packet.
comp | The ROHC compressor |
profile | The profile the context must be associated with |
ip | The IP packet that must be accepted by the context |
References c_profile::check_context, c_context::cid, rohc_comp::contexts, c_profile::id, rohc_comp::num_contexts, c_context::profile, rohc_debugf, and c_context::used.
Referenced by rohc_compress().
struct c_context* c_get_context | ( | struct rohc_comp * | comp, |
int | cid | ||
) | [read] |
Find out a context given its CID.
comp | The ROHC compressor |
cid | The CID of the context to find |
References c_context::cid, rohc_comp::contexts, rohc_comp::num_contexts, and c_context::used.
Referenced by c_deliver_feedback().
struct c_profile* c_get_profile_from_id | ( | struct rohc_comp * | comp, |
int | profile_id | ||
) | [read] |
Find out a ROHC profile given a profile ID.
comp | The ROHC compressor |
profile_id | The ID of the ROHC profile to find out |
References C_NUM_PROFILES, and rohc_comp::profiles.
Referenced by rohc_compress().
struct c_profile* c_get_profile_from_packet | ( | struct rohc_comp * | comp, |
struct ip_packet * | outer_ip, | ||
struct ip_packet * | inner_ip, | ||
int | protocol | ||
) | [read] |
Find out a ROHC profile given an IP protocol ID.
comp | The ROHC compressor |
outer_ip | The outer IP header of the network packet that will help choosing the best profile |
inner_ip |
|
protocol | The transport protocol of the network packet |
References c_is_in_list(), C_NUM_PROFILES, c_profile::description, ip_get_hdrlen(), ip_get_next_layer(), ip_get_plen(), ip_is_fragment(), IPV4, IPV6, rohc_comp::profiles, rohc_debugf, ROHC_PROFILE_RTP, ROHC_PROFILE_UNCOMPRESSED, and ip_packet::version.
Referenced by rohc_compress().
boolean c_is_in_list | ( | struct c_profile * | profile, |
int | port | ||
) |
Check whether an UDP port is associated with a given profile or not.
profile | The ROHC profile |
port | The UDP port |
References c_profile::ports, and ROHC_FALSE.
Referenced by c_get_profile_from_packet().
void c_piggyback_feedback | ( | struct rohc_comp * | comp, |
unsigned char * | feedback, | ||
int | size | ||
) |
Add a feedback packet to the next outgoing ROHC packet (piggybacking)
comp | The ROHC compressor |
feedback | The feedback data |
size | The length of the feedback packet |
References rohc_feedback::data, FEEDBACK_BUFFER_SIZE, rohc_comp::feedbacks, rohc_comp::feedbacks_first, rohc_comp::feedbacks_next, rohc_feedback::length, and rohc_debugf.
Referenced by d_change_mode_feedback(), and d_optimistic_feedback().
int rohc_c_context | ( | struct rohc_comp * | comp, |
int | cid, | ||
unsigned int | indent, | ||
char * | buffer | ||
) |
Get information about a compression context.
This function outputs XML.
comp | The ROHC compressor |
cid | The CID of the compressor context to output information about |
indent | The indent level to beautify the XML output |
buffer | The buffer where to store the information |
References c_mean_wlsb(), c_sum_wlsb(), c_context::cid, rohc_comp::contexts, c_profile::description, c_context::first_used, c_context::header_16_compressed, c_context::header_16_uncompressed, c_context::header_compressed_size, c_context::header_uncompressed_size, c_context::latest_used, c_context::mode, rohc_comp::num_contexts, c_context::num_recv_feedbacks, c_context::num_sent_ir, c_context::num_sent_ir_dyn, c_context::num_sent_packets, c_context::profile, c_context::state, c_context::total_16_compressed, c_context::total_16_uncompressed, c_context::total_compressed_size, c_context::total_uncompressed_size, and c_context::used.
Referenced by rohc_c_statistics().
struct c_profile* c_profiles[C_NUM_PROFILES] |
The compression parts of the ROHC profiles.
Define the compression part of the Uncompressed profile as described in the RFC 3095.