ROHC compression/decompression library
Functions | Variables
rohc_comp.c File Reference

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>
Include dependency graph for rohc_comp.c:

Functions

struct rohc_comprohc_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_profilec_profiles [C_NUM_PROFILES]
 The compression parts of the ROHC profiles.

Detailed Description

ROHC compression routines.

Author:
Didier Barvaux <didier.barvaux@toulouse.viveris.com>
The hackers from ROHC for Linux
David Moreau from TAS

Function Documentation

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.

Parameters:
compThe ROHC compressor
packetThe feedback data
sizeThe 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)

Parameters:
compThe ROHC compressor
feedbackThe feedback data
sizeThe 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.

Parameters:
compThe ROHC compressor
cidThe CID of the compressor context to output information about
indentThe indent level to beautify the XML output
bufferThe buffer where to store the information
Returns:
The length of the data stored in the buffer if successful, -2 if the given CID is too large, -1 if the given CID is unused or an error occurs

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.

Warning:
The values can not be modified after library initialization
Parameters:
compThe ROHC compressor
ir_timeoutThe number of packets to compress before going back to IR state to force a context refresh
fo_timeoutThe number of packets to compress before going back to FO state to force a context refresh
Returns:
true in case of success, false in case of failure

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.

Warning:
The value can not be modified after library initialization
Parameters:
compThe ROHC compressor
widthThe width of the W-LSB sliding window
Returns:
true in case of success, false in case of failure

References rohc_comp::num_packets, rohc_debugf, and rohc_comp::wlsb_window_width.

Referenced by rohc_alloc_compressor().


Variable Documentation

Initial value:

The compression parts of the ROHC profiles.

Define the compression part of the Uncompressed profile as described in the RFC 3095.