ROHC compression/decompression library
|
ROHC compression routines. More...
#include "rohc_comp.h"
#include "rohc_comp_internals.h"
#include "rohc_traces.h"
#include "rohc_time.h"
#include "rohc_debug.h"
#include "sdvl.h"
#include "decode.h"
#include "ip.h"
#include "crc.h"
#include "protocols/udp.h"
#include "protocols/ip_numbers.h"
#include "config.h"
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
Functions | |
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. | |
bool | rohc_comp_set_random_cb (struct rohc_comp *const comp, rohc_comp_random_cb_t callback, void *const user_context) |
Set the user-defined callback for random numbers. | |
int | rohc_compress (struct rohc_comp *comp, unsigned char *ibuf, int isize, unsigned char *obuf, int osize) |
Compress a ROHC packet. | |
bool | rohc_comp_set_wlsb_window_width (struct rohc_comp *const comp, const size_t width) |
Set the window width for the W-LSB algorithm. | |
bool | rohc_comp_set_periodic_refreshes (struct rohc_comp *const comp, const size_t ir_timeout, const size_t fo_timeout) |
Set the timeout values for IR and FO periodic refreshes. | |
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. | |
void | c_piggyback_feedback (struct rohc_comp *comp, unsigned char *feedback, int size) |
Add a feedback packet to the next outgoing ROHC packet (piggybacking) | |
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. | |
int | rohc_feedback_flush (struct rohc_comp *comp, unsigned char *obuf, int osize) |
Send as much feedback data as possible. | |
int | rohc_comp_get_last_packet_info (const struct rohc_comp *const comp, rohc_comp_last_packet_info_t *const info) |
Get some information about the last compressed packet. | |
const char * | rohc_comp_get_state_descr (const rohc_c_state state) |
Give a description for the given ROHC compression context state. | |
Variables | |
struct c_profile c_rtp_profile c_udp_profile c_udp_lite_profile c_esp_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.
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_feedback::cid, medium::cid_type, d_decode_add_cid(), d_is_add_cid(), c_feedback::data, c_profile::feedback, rohc_comp::medium, c_context::num_recv_feedbacks, c_context::profile, rohc_debugf, ROHC_LARGE_CID, sdvl_decode(), c_feedback::size, c_feedback::specific_offset, c_feedback::specific_size, c_feedback::type, and zfree.
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_RING_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, rohc_comp_get_state_descr(), rohc_get_mode_descr(), 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().
bool rohc_comp_set_periodic_refreshes | ( | struct rohc_comp *const | comp, |
const size_t | ir_timeout, | ||
const size_t | fo_timeout | ||
) |
Set the timeout values for IR and FO periodic refreshes.
The IR timeout shall be greater than the FO timeout. Both timeouts are expressed in number of compressed packets.
IR timeout is set to CHANGE_TO_IR_COUNT by default. FO timeout is set to CHANGE_TO_FO_COUNT by default.
comp | The ROHC compressor |
ir_timeout | The number of packets to compress before going back to IR state to force a context refresh |
fo_timeout | The number of packets to compress before going back to FO state to force a context refresh |
References rohc_comp::num_packets, rohc_comp::periodic_refreshes_fo_timeout, rohc_comp::periodic_refreshes_ir_timeout, and rohc_debugf.
Referenced by rohc_alloc_compressor().
bool rohc_comp_set_wlsb_window_width | ( | struct rohc_comp *const | comp, |
const size_t | width | ||
) |
Set the window width for the W-LSB algorithm.
W-LSB window width is set to C_WINDOW_WIDTH by default.
comp | The ROHC compressor |
width | The width of the W-LSB sliding window |
References rohc_comp::num_packets, rohc_debugf, and rohc_comp::wlsb_window_width.
Referenced by rohc_alloc_compressor().
struct c_profile* c_profiles[C_NUM_PROFILES] |
{ &c_rtp_profile, &c_udp_profile, &c_udp_lite_profile, &c_esp_profile, &c_ip_profile, &c_uncompressed_profile, }
The compression parts of the ROHC profiles.
struct c_profile c_rtp_profile c_udp_profile c_udp_lite_profile c_esp_profile c_ip_profile c_uncompressed_profile |
Define the compression part of the Uncompressed profile as described in the RFC 3095.