summaryrefslogtreecommitdiff
path: root/mcast/common/.svn/text-base/tools.c.svn-base
diff options
context:
space:
mode:
Diffstat (limited to 'mcast/common/.svn/text-base/tools.c.svn-base')
-rw-r--r--mcast/common/.svn/text-base/tools.c.svn-base777
1 files changed, 0 insertions, 777 deletions
diff --git a/mcast/common/.svn/text-base/tools.c.svn-base b/mcast/common/.svn/text-base/tools.c.svn-base
deleted file mode 100644
index 9e05a10..0000000
--- a/mcast/common/.svn/text-base/tools.c.svn-base
+++ /dev/null
@@ -1,777 +0,0 @@
-/*
- * (c) BayCom GmbH, http://www.baycom.de, info@baycom.de
- *
- * See the COPYING file for copyright information and
- * how to reach the author.
- *
- */
-
-#define DEBUG 1
-#include "headers.h"
-
-#ifdef DEBUG
-const Param inversion_list[] = {
- {"INVERSION_OFF", INVERSION_OFF},
- {"INVERSION_ON", INVERSION_ON},
- {"INVERSION_AUTO", INVERSION_AUTO}
-};
-
-const Param bw_list[] = {
- {"BANDWIDTH_6_MHZ", BANDWIDTH_6_MHZ},
- {"BANDWIDTH_7_MHZ", BANDWIDTH_7_MHZ},
- {"BANDWIDTH_8_MHZ", BANDWIDTH_8_MHZ}
-};
-
-const Param fec_list[] = {
- {"FEC_1_2", FEC_1_2},
- {"FEC_2_3", FEC_2_3},
- {"FEC_3_4", FEC_3_4},
- {"FEC_4_5", FEC_4_5},
- {"FEC_5_6", FEC_5_6},
- {"FEC_6_7", FEC_6_7},
- {"FEC_7_8", FEC_7_8},
- {"FEC_8_9", FEC_8_9},
- {"FEC_AUTO", FEC_AUTO},
- {"FEC_NONE", FEC_NONE},
- {"FEC_1_4", FEC_1_4}, // RMM S2 Extension
- {"FEC_1_3", FEC_1_3},
- {"FEC_2_5", FEC_2_5},
- {"FEC_9_10", FEC_9_10}
-};
-
-const Param guard_list[] = {
- {"GUARD_INTERVAL_1_16", GUARD_INTERVAL_1_16},
- {"GUARD_INTERVAL_1_32", GUARD_INTERVAL_1_32},
- {"GUARD_INTERVAL_1_4", GUARD_INTERVAL_1_4},
- {"GUARD_INTERVAL_1_8", GUARD_INTERVAL_1_8}
-};
-
-const Param hierarchy_list[] = {
- {"HIERARCHY_1", HIERARCHY_1},
- {"HIERARCHY_2", HIERARCHY_2},
- {"HIERARCHY_4", HIERARCHY_4},
- {"HIERARCHY_NONE", HIERARCHY_NONE}
-};
-
-const Param constellation_list[] = {
- {"QPSK", QPSK},
- {"QAM_128", QAM_128},
- {"QAM_16", QAM_16},
- {"QAM_256", QAM_256},
- {"QAM_32", QAM_32},
- {"QAM_64", QAM_64},
- {"QPSK_S2", QPSK_S2}, // RMM S2 Extension
- {"PSK8", PSK8}
-};
-
-const Param transmissionmode_list[] = {
- {"TRANSMISSION_MODE_2K", TRANSMISSION_MODE_2K},
- {"TRANSMISSION_MODE_8K", TRANSMISSION_MODE_8K},
-};
-
-const Param capabilities_list[] = {
- {"Stupid: ", FE_IS_STUPID},
- {"FE_CAN_INVERSION_AUTO: ", FE_CAN_INVERSION_AUTO},
- {"CAN_FEC_1_2: ", FE_CAN_FEC_1_2},
- {"CAN_FEC_2_3: ", FE_CAN_FEC_2_3},
- {"CAN_FEC_3_4: ", FE_CAN_FEC_3_4},
- {"CAN_FEC_4_5: ", FE_CAN_FEC_4_5},
- {"CAN_FEC_6_7: ", FE_CAN_FEC_6_7},
- {"CAN_FEC_7_8: ", FE_CAN_FEC_7_8},
- {"CAN_FEC_8_9: ", FE_CAN_FEC_8_9},
- {"CAN_FEC_AUTO: ", FE_CAN_FEC_AUTO},
- {"FE_CAN_QPSK: ", FE_CAN_QPSK},
- {"FE_CAN_QAM_16: ", FE_CAN_QAM_16},
- {"FE_CAN_QAM_32: ", FE_CAN_QAM_32},
- {"FE_CAN_QAM_64: ", FE_CAN_QAM_64},
- {"FE_CAN_QAM_128: ", FE_CAN_QAM_128},
- {"FE_CAN_QAM_256: ", FE_CAN_QAM_256},
- {"FE_CAN_QAM_AUTO: ", FE_CAN_QAM_AUTO},
- {"FE_CAN_TRANSMISSION_MODE_AUTO: ", FE_CAN_TRANSMISSION_MODE_AUTO},
- {"FE_CAN_BANDWIDTH_AUTO: ", FE_CAN_BANDWIDTH_AUTO},
- {"FE_CAN_GUARD_INTERVAL_AUTO: ", FE_CAN_GUARD_INTERVAL_AUTO},
- {"FE_CAN_HIERARCHY_AUTO: ", FE_CAN_HIERARCHY_AUTO},
- {"FE_CAN_MUTE_TS: ", FE_CAN_MUTE_TS}
-// {"FE_CAN_CLEAN_SETUP: ",FE_CAN_CLEAN_SETUP}
-};
-
-#define LIST_SIZE(x) sizeof(x)/sizeof(Param)
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-void print_fe_info (struct dvb_frontend_info *fe_info)
-{
- fprintf (stdout, "-------------------------------------------\n");
- fprintf (stdout, "Tuner name: %s\n", fe_info->name);
- fprintf (stdout, "Tuner type: %u\n", (unsigned int) fe_info->type);
- fprintf (stdout, "Frequency min.: %u\n", fe_info->frequency_min);
- fprintf (stdout, "Frequency max.: %u\n", fe_info->frequency_max);
- fprintf (stdout, "Frequency stepsize: %u\n", fe_info->frequency_stepsize);
- fprintf (stdout, "Frequency tolerance: %u\n", fe_info->frequency_tolerance);
- fprintf (stdout, "Symbol rate min: %u\n", fe_info->symbol_rate_min);
- fprintf (stdout, "Symbol rate max: %u\n", fe_info->symbol_rate_max);
- fprintf (stdout, "Symbol rate tolerance: %u\n", fe_info->symbol_rate_tolerance);
- fprintf (stdout, "Notifier delay: %u\n", fe_info->notifier_delay);
- fprintf (stdout, "Cpas: 0x%x\n", (unsigned int) fe_info->caps);
-
- fprintf (stdout, "-------------------------------------------\n");
- fprintf (stdout, "Frontend Capabilities:\n");
- int i;
-
- for (i = 0; i < LIST_SIZE (capabilities_list); i++) {
- if (fe_info->caps & capabilities_list[i].value)
- fprintf (stdout, "%syes\n", capabilities_list[i].name);
- else
- fprintf (stdout, "%sno\n", capabilities_list[i].name);
- }
- fprintf (stdout, "-------------------------------------------\n");
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-void print_frontend_settings (struct dvb_frontend_parameters *frontend_param)
-{
- int i;
- fprintf (stdout, "\n----- Front End Settings ----- ");
- fprintf (stdout, "\nFrequency : %u \n", frontend_param->frequency);
- for (i = 0; i < LIST_SIZE (inversion_list); i++) {
- if (inversion_list[i].value == frontend_param->inversion)
- fprintf (stdout, "Inversion : %s\n", inversion_list[i].name);
-
- }
- //
- for (i = 0; i < LIST_SIZE (bw_list); i++) {
- if (frontend_param->u.ofdm.bandwidth == bw_list[i].value)
- fprintf (stdout, "Bandwidth : %s\n", bw_list[i].name);
-
- }
- for (i = 0; i < LIST_SIZE (fec_list); i++) {
- if (fec_list[i].value == frontend_param->u.ofdm.code_rate_HP)
- fprintf (stdout, "Code Rate HP : %s\n", fec_list[i].name);
-
- }
- for (i = 0; i < LIST_SIZE (fec_list); i++) {
- if (fec_list[i].value == frontend_param->u.ofdm.code_rate_LP)
- fprintf (stdout, "Code Rate LP : %s\n", fec_list[i].name);
-
- }
-
- for (i = 0; i < LIST_SIZE (constellation_list); i++) {
- if (constellation_list[i].value == frontend_param->u.ofdm.constellation)
- fprintf (stdout, "Modulation : %s\n", constellation_list[i].name);
-
- }
-
- for (i = 0; i < LIST_SIZE (transmissionmode_list); i++) {
- if (transmissionmode_list[i].value == frontend_param->u.ofdm.transmission_mode)
- fprintf (stdout, "Transmission mode : %s\n", transmissionmode_list[i].name);
-
- }
-
- for (i = 0; i < LIST_SIZE (guard_list); i++) {
- if (guard_list[i].value == frontend_param->u.ofdm.guard_interval)
- fprintf (stdout, "Guard interval : %s\n", guard_list[i].name);
-
- }
-
- for (i = 0; i < LIST_SIZE (hierarchy_list); i++) {
- if (hierarchy_list[i].value == frontend_param->u.ofdm.hierarchy_information)
- fprintf (stdout, "Hierarchy Information : %s\n", hierarchy_list[i].name);
-
- }
-
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-void print_mcg (struct in6_addr *mcg)
-{
- char host[80];
- unsigned int freq;
- struct in6_addr mc;
- int i;
-
- for (i = 0; i < 8; i++) {
- mc.s6_addr16[i] = ntohs (mcg->s6_addr16[i]);
- }
-
- freq = mc.s6_addr16[6] | (mc.s6_addr16[7] & NOPID_MASK) << 3;
-
- inet_ntop (AF_INET6, mcg->s6_addr, (char *) host, INET6_ADDRSTRLEN);
- fprintf (stdout, "MCG: %s\n", host);
-
- fprintf (stdout, "\n");
- fprintf (stdout, "TS-Streaming group\n");
- fprintf (stdout, "-----------------------------\n");
- fprintf (stdout, "Streaming Group - 0x%x \n", (mc.s6_addr16[1] >> 12) & 0xf);
- fprintf (stdout, "Priority - 0x%x \n", (mc.s6_addr16[1] >> 8) & 0xf);
- fprintf (stdout, "Reception System - 0x%x \n", mc.s6_addr16[1] & 0xff);
- fprintf (stdout, "CAM Handling - 0x%x \n", mc.s6_addr16[2]);
- fprintf (stdout, "Polarisation - 0x%x \n", (mc.s6_addr16[3] >> 12) & 0xf);
- fprintf (stdout, "SATPosition - 0x%x \n", mc.s6_addr16[3] & 0xfff);
- fprintf (stdout, "Symbol Rate - 0x%x \n", mc.s6_addr16[4]);
- fprintf (stdout, "Modulation - 0x%x \n", mc.s6_addr16[5]);
- fprintf (stdout, "Frequency (0x%x) - %d / %d\n\n", freq, freq * (16667 / 8), freq * (250 / 8));
-
- fprintf (stdout, "PID - 0x%x \n", mc.s6_addr16[7] & PID_MASK);
-}
-#endif
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-/* Frequency 19Bit
- DVB-T/DVB-C 524288 Steps * (25/12)kHz = 0...1092MHz in 2.083333kHz steps
- DVB-S 524288 Steps * (1/20) MHz = 0...26.2GHz in 50kHz steps
-*/
-void fe_parms_to_mcg (struct in6_addr *mcg, streaming_group_t StreamingGroup, fe_type_t type, recv_sec_t * sec, struct dvb_frontend_parameters *fep, int vpid)
-{
- int i;
- unsigned int Priority = 0;
- unsigned int ReceptionSystem = 0;
- unsigned int CAMHandling = 0;
- unsigned int Polarisation = 0;
- unsigned int SATPosition = NO_SAT_POS;
- unsigned int Symbolrate = 0;
- unsigned int Modulation = 0;
- unsigned int TransmissionMode = 0;
- unsigned int Frequency;
- double fmul;
-
- // Default for DVB-T and DVB-C
- fmul = 12.0 * (((double) fep->frequency) + 1041);
- Frequency = (unsigned int) (fmul / 25000.0);
-
- switch ((int)type) {
- case FE_QPSK:
- case FE_DVBS2:
- Frequency = (fep->frequency + 24) / 50;
- //sec->diseqc_cmd currently not used
- // Fixme: Translation Diseqc->position/LOF-frequency
- Polarisation = (sec->mini_cmd << 3) | (sec->tone_mode << 2) | sec->voltage;
- Symbolrate = fep->u.qpsk.symbol_rate / 1000;
- Modulation |= (fep->u.qpsk.fec_inner) & 0xf;
-
- // RMM S2 extension: Put Modulation in 23:16 and rolloff in 31:24
- if (((fep->u.qpsk.fec_inner >> 16) & 0xff) == PSK8)
- Modulation |= 2 << 4;
- if (((fep->u.qpsk.fec_inner >> 16) & 0xff) == QPSK_S2)
- Modulation |= 1 << 4;
- Modulation |= fep->inversion << 14;
- break;
- case FE_QAM:
- Symbolrate = fep->u.qam.symbol_rate / 200;
- Modulation |= fep->u.qam.modulation;
- Modulation |= fep->inversion << 14;
- break;
- case FE_OFDM:
- TransmissionMode = fep->u.ofdm.transmission_mode;
- Symbolrate = (TransmissionMode & 0x7) << 8 | (fep->u.ofdm.code_rate_HP << 4) | fep->u.ofdm.code_rate_LP;
- Modulation |= (fep->u.ofdm.constellation & 0xf) | (fep->u.ofdm.hierarchy_information & 3) << 4 | (fep->u.ofdm.bandwidth & 3) << 7 | (fep->u.ofdm.guard_interval & 7) << 9 | (fep->inversion & 3) << 14;
- break;
- case FE_ATSC:
- Modulation |= fep->u.vsb.modulation;
- Modulation |= fep->inversion << 14;
- break;
- }
-
- if (type == FE_DVBS2 && !(Modulation & 0x30) ){
- type=FE_QPSK;
- }
-
- ReceptionSystem = type;
-
- mcg->s6_addr16[0] = MC_PREFIX;
- mcg->s6_addr16[1] = ((StreamingGroup & 0xf) << 12) | ((Priority & 0xf) << 8) | (ReceptionSystem & 0xff);
- mcg->s6_addr16[2] = CAMHandling;
- mcg->s6_addr16[3] = ((Polarisation & 0xf) << 12) | (SATPosition & 0xfff);
- mcg->s6_addr16[4] = Symbolrate;
- mcg->s6_addr16[5] = Modulation;
- mcg->s6_addr16[6] = Frequency;
- mcg->s6_addr16[7] = (vpid & PID_MASK) | ((Frequency >> 16) << 13);
-
- for (i = 0; i < 8; i++) {
- mcg->s6_addr16[i] = htons (mcg->s6_addr16[i]);
- }
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-int mcg_to_all_parms(struct in6_addr *mcg, struct mcg_data * mcd)
-{
- int ret;
- mcd->mcg=*mcg;
- int n;
-
- ret=mcg_to_fe_parms(mcg, &mcd->type, &mcd->sec, &mcd->fep, &mcd->vpid);
-
- if (ret)
- return ret;
- mcg_get_satpos(mcg, &mcd->satpos);
-
- for(n=0;n<MAX_TUNER_CACHE;n++) {
- mcd->sat_cache[n].resolved=NOT_RESOLVED;
- mcd->sat_cache[n].num=0;
- mcd->sat_cache[n].component=0;
- }
-
- return 0;
-}
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-int mcg_to_fe_parms (struct in6_addr *mcg, fe_type_t * type, recv_sec_t * sec, struct dvb_frontend_parameters *fep, int *vpid)
-{
- struct in6_addr mc = *mcg;
- streaming_group_t StreamingGroup;
- unsigned int freq;
- double fmul;
- fe_type_t fetype;
-
- int i;
- for (i = 0; i < 8; i++) {
- mc.s6_addr16[i] = ntohs (mc.s6_addr16[i]);
- }
-
- StreamingGroup = (streaming_group_t)((mc.s6_addr16[1] >> 12) & 0xf);
-
- if (StreamingGroup != STREAMING_PID) {
- return -1;
- }
-
- if (fep) {
- memset (fep, 0, sizeof (struct dvb_frontend_parameters));
- }
- if (sec) {
- memset (sec, 0, sizeof (recv_sec_t));
- }
-
-
- freq = mc.s6_addr16[6] | ((mc.s6_addr16[7] & NOPID_MASK) << 3);
-
- fmul = 25000.0 * (double) freq;
-
- fep->frequency = (unsigned int) (fmul / 12.0);
- fep->inversion = (fe_spectral_inversion_t)((mc.s6_addr16[5] >> 14) & 3);
- fetype = (fe_type_t)(mc.s6_addr16[1] & 0xff);
-
- if (type) {
- *type = fetype;
- }
- switch ((int)fetype) {
- case FE_QPSK:
- case FE_DVBS2:
- {
- int Polarisation = mc.s6_addr16[3] >> 12;
- fep->frequency = freq * 50;
- sec->mini_cmd = (fe_sec_mini_cmd_t)((Polarisation >> 3) & 1);
- sec->tone_mode = (fe_sec_tone_mode_t)((Polarisation >> 2) & 1);
- sec->voltage = (fe_sec_voltage_t)(Polarisation & 3);
-
- fep->u.qpsk.symbol_rate = mc.s6_addr16[4] * 1000;
- fep->u.qpsk.fec_inner = (fe_code_rate_t)(mc.s6_addr16[5] & 0xf);
-
- unsigned int fec_inner=(unsigned int)fep->u.qpsk.fec_inner;
-
- // RMM S2 Extension
- switch (mc.s6_addr16[5] & 0x30) {
- case 0x10:
- fec_inner |= QPSK_S2 << 16;
- fep->u.qpsk.fec_inner=(fe_code_rate_t)fec_inner;
- *type = (fe_type_t) FE_DVBS2; // force FE type
- break;
- case 0x20:
- fec_inner |= PSK8 << 16;
- fep->u.qpsk.fec_inner=(fe_code_rate_t)fec_inner;
- *type = (fe_type_t) FE_DVBS2;
- break;
- default:
- *type = FE_QPSK;
- }
- }
- break;
- case FE_QAM:
- fep->u.qam.symbol_rate = mc.s6_addr16[4] * 200;
- fep->u.qam.modulation = (fe_modulation_t)(mc.s6_addr16[5] & 0xf);
- // Ignore inversion
- break;
- case FE_OFDM:
- fep->u.ofdm.transmission_mode = (fe_transmit_mode_t)((mc.s6_addr16[4] >> 8) & 3);
- fep->u.ofdm.code_rate_HP = (fe_code_rate_t)((mc.s6_addr16[4] >> 4) & 0xf);
- fep->u.ofdm.code_rate_LP = (fe_code_rate_t)(mc.s6_addr16[4] & 0xf);
-
- fep->u.ofdm.constellation = (fe_modulation_t) (mc.s6_addr16[5] & 0xf);
- fep->u.ofdm.hierarchy_information = (fe_hierarchy_t)((mc.s6_addr16[5] >> 4) & 3);
- fep->u.ofdm.bandwidth = (fe_bandwidth_t)((mc.s6_addr16[5] >> 7) & 3);
- fep->u.ofdm.guard_interval = (fe_guard_interval_t)((mc.s6_addr16[5] >> 9) & 7);
- break;
- case FE_ATSC:
- fep->u.vsb.modulation = (fe_modulation_t)(mc.s6_addr16[5] & 0xf);
- break;
- }
-
- if (vpid) {
- *vpid = mc.s6_addr16[7] & PID_MASK;
- }
- //print_frontend_settings(fep);
- return 0;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void mcg_set_streaming_group (struct in6_addr *mcg, streaming_group_t StreamingGroup)
-{
- int i;
-
- for (i = 0; i < 8; i++) {
- mcg->s6_addr16[i] = ntohs (mcg->s6_addr16[i]);
- }
-
- // Change StreamingGroup
- mcg->s6_addr16[1] = ((StreamingGroup & 0xf) << 12) | (mcg->s6_addr16[1] & 0x0fff);
-
- // Remove PID
- mcg->s6_addr16[7] &= NOPID_MASK;
-
- // Remove CAID
- mcg->s6_addr16[2] = 0;
-
- for (i = 0; i < 8; i++) {
- mcg->s6_addr16[i] = htons (mcg->s6_addr16[i]);
- }
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void mcg_get_streaming_group (struct in6_addr *mcg, streaming_group_t *StreamingGroup)
-{
- if(StreamingGroup) {
- *StreamingGroup=(streaming_group_t)((ntohs (mcg->s6_addr16[1]) >> 12) & 0xf);
- }
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void mcg_set_pid (struct in6_addr *mcg, int pid)
-{
-
- mcg->s6_addr16[7] = ntohs (mcg->s6_addr16[7]);
-
- // Remove PID
- mcg->s6_addr16[7] &= NOPID_MASK;
-
- // Set new PID
- mcg->s6_addr16[7] |= pid;
-
- mcg->s6_addr16[7] = htons (mcg->s6_addr16[7]);
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void mcg_get_pid (struct in6_addr *mcg, int *pid)
-{
- if (pid) {
- *pid=ntohs (mcg->s6_addr16[7]) & PID_MASK;
- }
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void mcg_init_streaming_group (struct in6_addr *mcg, streaming_group_t StreamingGroup)
-{
- unsigned int Priority = 1;
- mcg->s6_addr16[0] = MC_PREFIX;
- mcg->s6_addr16[1] = ((StreamingGroup & 0xf) << 12) | ((Priority & 0xf) << 8) | (0 & 0xff);
- mcg->s6_addr16[2] = 0;
- mcg->s6_addr16[3] = 0;
- mcg->s6_addr16[4] = 0;
- mcg->s6_addr16[5] = 0;
- mcg->s6_addr16[6] = 0;
- mcg->s6_addr16[7] = 0;
- int i;
- for (i = 0; i < 8; i++) {
- mcg->s6_addr16[i] = htons (mcg->s6_addr16[i]);
- }
-
-}
-
-void mcg_get_priority (struct in6_addr *mcg, int *priority)
-{
- if (priority) {
- *priority = (ntohs (mcg->s6_addr16[1])>>8) & 0xf;
- }
-}
-
-void mcg_set_priority (struct in6_addr *mcg, int priority)
-{
- mcg->s6_addr16[1] = ntohs (mcg->s6_addr16[1]);
- mcg->s6_addr16[1] &= 0xf0ff;
- mcg->s6_addr16[1] |= (priority & 0xf) << 8;
- mcg->s6_addr16[1] = htons (mcg->s6_addr16[1]);
-}
-
-void mcg_get_satpos (struct in6_addr *mcg, int *satpos)
-{
- if (satpos) {
- *satpos = ntohs (mcg->s6_addr16[3]) & 0xfff;
- }
-}
-
-void mcg_set_satpos (struct in6_addr *mcg, int satpos)
-{
- mcg->s6_addr16[3] = ntohs (mcg->s6_addr16[3]);
-
- // Remove SatPos
- mcg->s6_addr16[3] &= ~NO_SAT_POS;
-
- // Set new SatPos
- mcg->s6_addr16[3] |= (satpos & NO_SAT_POS);
-
- mcg->s6_addr16[3] = htons (mcg->s6_addr16[3]);
-}
-
-void mcg_get_id (struct in6_addr *mcg, int *id)
-{
- if (id) {
- *id = ntohs (mcg->s6_addr16[2]);
- }
-}
-
-void mcg_set_id (struct in6_addr *mcg, int id)
-{
- mcg->s6_addr16[2] = htons(id);
-}
-
-#if defined LIBRARY || defined SERVER
-#ifndef OS_CODE
- #define OS_CODE 3
-#endif
-#if MAX_MEM_LEVEL >= 8
-# define DEF_MEM_LEVEL 8
-#else
-# define DEF_MEM_LEVEL MAX_MEM_LEVEL
-#endif
-
-static unsigned char gzip_hdr[] = { 0x1f, 0x8b, Z_DEFLATED, 0 /*flags */ , 0, 0, 0, 0 /*time */ , 0 /*xflags */ , OS_CODE };
-
-int check_header (const Bytef * buf, unsigned int buflen)
-{
- if (buflen <= 10)
- return 0;
-
- if (buf[0] != gzip_hdr[0] || buf[1] != gzip_hdr[1]) {
- return -1;
- }
-
- if (memcmp (buf, gzip_hdr, sizeof (gzip_hdr))) {
- return -2;
- }
- return 10;
-}
-
-unsigned int get32_lsb_first (unsigned char *ptr)
-{
- int i;
- unsigned int val = 0;
- for (i = 3; i >= 0; i--) {
- val <<= 8;
- val |= (ptr[i] & 0xff);
- }
- return val;
-}
-
-void put32_lsb_first (unsigned char *ptr, unsigned int val)
-{
- int i;
- for (i = 0; i < 4; i++) {
- ptr[i] = val & 0xff;
- val >>= 8;
- }
-}
-
-int gzip_ (Bytef * dest, unsigned int *destLen, const Bytef * source, unsigned int sourceLen, int level)
-{
- unsigned int crc = crc32 (0L, Z_NULL, 0);
- z_stream stream;
- int err;
-
- if (*destLen <= 10) {
- return Z_BUF_ERROR;
- }
- memcpy (dest, gzip_hdr, sizeof (gzip_hdr));
-
- stream.next_in = (Bytef *) source;
- stream.avail_in = sourceLen;
-
- stream.next_out = dest + 10;
- stream.avail_out = *destLen - 10;
-
- stream.zalloc = (alloc_func) 0;
- stream.zfree = (free_func) 0;
- stream.opaque = (voidpf) 0;
-
- err = deflateInit2 (&stream, level, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
-
- if (err != Z_OK)
- return err;
-
- err = deflate (&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- deflateEnd (&stream);
- return err == Z_OK ? Z_BUF_ERROR : err;
- }
- *destLen = stream.total_out + 10;
-
- err = deflateEnd (&stream);
- crc = crc32 (crc, source, sourceLen);
-
- put32_lsb_first ((unsigned char *) (dest + *destLen), crc);
- put32_lsb_first ((unsigned char *) (dest + *destLen + 4), sourceLen);
-
- *destLen += 8;
- return err;
-}
-
-int gzip (Bytef * dest, unsigned int *destLen, const Bytef * source, unsigned int sourceLen, int level)
-{
- if (!level) {
- memcpy (dest, source, sourceLen);
- *destLen = sourceLen;
- return 0;
- }
- return gzip_ (dest, destLen, source, sourceLen,level);
-}
-
-int gunzip_ (Bytef * dest, unsigned int *destLen, const Bytef * source, unsigned int sourceLen)
-{
- unsigned int crc = crc32 (0L, Z_NULL, 0);
- z_stream stream;
- int err;
- int ret = check_header (source, sourceLen);
- if (ret < 0) {
- return ret;
- }
-
- stream.next_in = (Bytef *) source + ret;
- stream.avail_in = sourceLen - ret;
-
- stream.next_out = dest;
- stream.avail_out = *destLen;
-
- stream.zalloc = (alloc_func) 0;
- stream.zfree = (free_func) 0;
-
- err = inflateInit2 (&stream, -MAX_WBITS);
- if (err != Z_OK)
- return err;
-
- err = inflate (&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- inflateEnd (&stream);
- if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
- return Z_DATA_ERROR;
- return err;
- }
- *destLen = stream.total_out;
-
- err = inflateEnd (&stream);
- crc = crc32 (crc, dest, stream.total_out);
-
- int crc_found = get32_lsb_first ((unsigned char *) (stream.next_in));
- int len_found = get32_lsb_first ((unsigned char *) (stream.next_in + 4));
-
- if (crc_found == crc && len_found == stream.total_out) {
- return err;
- }
-
- return Z_DATA_ERROR;
-}
-
-int gunzip (Bytef * dest, unsigned int *destLen, const Bytef * source, unsigned int sourceLen)
-{
- int ret = gunzip_ (dest, destLen, source, sourceLen);
- if (ret == -1) {
- memcpy (dest, source, sourceLen);
- *destLen = sourceLen;
- return 0;
- } else if (ret < 0) {
- return -1;
- }
- return 0;
-}
-#endif
-#ifndef BACKTRACE
- void print_trace (void)
- {
- }
-#else
-#include <execinfo.h>
-/* Obtain a backtrace and print it to stdout. */
-void print_trace (void)
-{
- void *array[10];
- size_t size;
- char **strings;
- size_t i;
-
- size = backtrace (array, 10);
- strings = backtrace_symbols (array, size);
-
- printf ("Obtained %zd stack frames.\n", size);
-
- for (i = 0; i < size; i++) {
- printf ("%s\n", strings[i]);
- }
- free (strings);
-}
-
-
-void SignalHandlerCrash(int signum)
-{
- void *array[15];
- size_t size;
- char **strings;
- size_t i;
- FILE *f;
- char dtstr[16];
- time_t t=time(NULL);
- struct tm *tm=localtime(&t);
-
- signal(signum,SIG_DFL); // Allow core dump
-
- f=fopen("/var/log/mcli.crashlog","a");
- if (f) {
- strftime(dtstr, sizeof(dtstr), "%b %e %T", tm);
- size = backtrace (array, 15);
- strings = backtrace_symbols (array, size);
- fprintf(f,"%s ### Crash signal %i ###\n",dtstr, signum);
- for (i = 0; i < size; i++)
- fprintf (f, "%s Backtrace %i: %s\n", dtstr, i, strings[i]);
- free (strings);
- fclose(f);
- }
-}
-#endif
-
-#ifdef SYSLOG
-pthread_mutex_t _loglock = PTHREAD_MUTEX_INITIALIZER;
-
-UDPContext * syslog_fd = NULL;
-char *_logstr = NULL;
-
-int syslog_init(void)
-{
- struct in6_addr mcglog;
- mcg_init_streaming_group (&mcglog, STREAMING_LOG);
- syslog_fd = server_udp_open (&mcglog, 23000, NULL);
- if(syslog_fd) {
- _logstr=(char *)malloc(10240);
- }
-
- return syslog_fd?0:-1;
-}
-
-int syslog_write(char *s)
-{
- return udp_write (syslog_fd, (uint8_t *)s, strlen(s));
-}
-
-void syslog_exit(void)
-{
- if(syslog_fd) {
- udp_close(syslog_fd);
- free(_logstr);
- }
-}
-#endif