mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-16 23:08:32 +00:00
Move Asterisk-addons modules into the main Asterisk source tree.
Someone asked yesterday, "is there a good reason why we can't just put these modules in Asterisk?". After a brief discussion, as long as the modules are clearly set aside in their own directory and not enabled by default, it is perfectly fine. For more information about why a module goes in addons, see README-addons.txt. chan_ooh323 does not currently compile as it is behind some trunk API updates. However, it will not build by default, so it should be okay for now. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@204413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
273
addons/ooh323c/src/printHandler.c
Normal file
273
addons/ooh323c/src/printHandler.c
Normal file
@@ -0,0 +1,273 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/* This is an implementation of a simple print handler. It outputs
|
||||
the fields of an encoded PER message to stdout in a structured output
|
||||
format..
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#ifdef HAVE_MALLOC_H
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
#include "printHandler.h"
|
||||
#include "ootypes.h"
|
||||
#include "rtctype.h"
|
||||
#include "ootrace.h"
|
||||
|
||||
EventHandler printHandler;
|
||||
|
||||
static const char* pVarName;
|
||||
static int gIndentSpaces;
|
||||
|
||||
static const char* bitStrToString
|
||||
(ASN1UINT numbits, const ASN1OCTET* data, char* buffer, size_t bufsiz);
|
||||
|
||||
static const char* octStrToString
|
||||
(ASN1UINT numocts, const ASN1OCTET* data, char* buffer, size_t bufsiz);
|
||||
|
||||
void initializePrintHandler(EventHandler *printHandler, char * varname)
|
||||
{
|
||||
printHandler->startElement = &printStartElement;
|
||||
printHandler->endElement = &printEndElement;
|
||||
printHandler->boolValue = &printBoolValue;
|
||||
printHandler->intValue = &printIntValue;
|
||||
printHandler->uIntValue = &printuIntValue ;
|
||||
printHandler->bitStrValue = &printBitStrValue;
|
||||
printHandler->octStrValue = &printOctStrValue;
|
||||
printHandler->charStrValue = &printCharStrValue;
|
||||
printHandler->charStr16BitValue = &printCharStr16BitValue ;
|
||||
printHandler->nullValue = &printNullValue;
|
||||
printHandler->oidValue = &printOidValue;
|
||||
printHandler->enumValue = &printEnumValue;
|
||||
printHandler->openTypeValue = &printOpenTypeValue;
|
||||
pVarName = varname;
|
||||
OOTRACEDBGB2("%s = {\n", pVarName);
|
||||
gIndentSpaces += 3;
|
||||
|
||||
}
|
||||
|
||||
void finishPrint()
|
||||
{
|
||||
OOTRACEDBGB1 ("}\n");
|
||||
gIndentSpaces -= 3;
|
||||
if (gIndentSpaces != 0) {
|
||||
OOTRACEDBGB1 ("ERROR: unbalanced structure\n");
|
||||
}
|
||||
}
|
||||
|
||||
void indent ()
|
||||
{
|
||||
int i=0;
|
||||
for (i = 0; i < gIndentSpaces; i++) OOTRACEDBGB1 (" ");
|
||||
}
|
||||
|
||||
void printStartElement (const char* name, int index)
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB1 (name);
|
||||
if (index >= 0) OOTRACEDBGB2 ("[%d]", index);
|
||||
OOTRACEDBGB1 (" = {\n");
|
||||
gIndentSpaces += 3;
|
||||
}
|
||||
|
||||
void printEndElement (const char* name, int index)
|
||||
{
|
||||
gIndentSpaces -= 3;
|
||||
indent ();
|
||||
OOTRACEDBGB1 ("}\n");
|
||||
}
|
||||
|
||||
void printBoolValue (ASN1BOOL value)
|
||||
{
|
||||
const char* s = value ? "TRUE" : "FALSE";
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("%s\n", s);
|
||||
}
|
||||
|
||||
void printIntValue (ASN1INT value)
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("%d\n", value);
|
||||
}
|
||||
|
||||
void printuIntValue (ASN1UINT value)
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("%u\n", value);
|
||||
}
|
||||
|
||||
void printBitStrValue (ASN1UINT numbits, const ASN1OCTET* data)
|
||||
{
|
||||
#ifdef __MINGW32__
|
||||
char s[numbits + 8];
|
||||
indent ();
|
||||
OOTRACEDBGB2("%s\n", bitStrToString (numbits, data, s, numbits+8));
|
||||
#else
|
||||
char* s = (char*)malloc(numbits + 8);
|
||||
indent ();
|
||||
OOTRACEDBGB2("%s\n", bitStrToString (numbits, data, s, numbits+8));
|
||||
free(s);
|
||||
#endif
|
||||
}
|
||||
|
||||
void printOctStrValue (ASN1UINT numocts, const ASN1OCTET* data)
|
||||
{
|
||||
int bufsiz = (numocts * 2) + 8;
|
||||
#ifdef __MINGW32__
|
||||
char s[bufsiz];
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("%s\n", octStrToString (numocts, data, s, bufsiz));
|
||||
#else
|
||||
char* s = (char*)malloc(bufsiz);
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("%s\n", octStrToString (numocts, data, s, bufsiz));
|
||||
free(s);
|
||||
#endif
|
||||
}
|
||||
|
||||
void printCharStrValue (const char* value)
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("\"%s\"\n", value);
|
||||
}
|
||||
|
||||
void printCharStr16BitValue (ASN1UINT nchars, ASN116BITCHAR* data)
|
||||
{
|
||||
ASN1UINT ui;
|
||||
indent ();
|
||||
|
||||
for (ui = 0; ui < nchars; ui++) {
|
||||
if (data[ui] >= 32 && data[ui] <= 127)
|
||||
OOTRACEDBGB2 ("%c", (char)data[ui]);
|
||||
else
|
||||
OOTRACEDBGB1 ("?");
|
||||
}
|
||||
|
||||
OOTRACEDBGB1 ("\n");
|
||||
}
|
||||
|
||||
void printCharStr32BitValue (ASN1UINT nchars, ASN132BITCHAR* data)
|
||||
{
|
||||
ASN1UINT ui;
|
||||
indent ();
|
||||
|
||||
for ( ui = 0; ui < nchars; ui++) {
|
||||
if (data[ui] >= 32 && data[ui] <= 127)
|
||||
OOTRACEDBGB2 ("%c", (char)data[ui]);
|
||||
else
|
||||
OOTRACEDBGB2 ("\\%d", data[ui]);
|
||||
}
|
||||
|
||||
OOTRACEDBGB1 ("\n");
|
||||
}
|
||||
|
||||
void printNullValue ()
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB1 ("NULL\n");
|
||||
}
|
||||
|
||||
void ooPrintOIDValue (ASN1OBJID* pOID)
|
||||
{
|
||||
ASN1UINT ui;
|
||||
OOTRACEDBGB1 ("{ \n");
|
||||
for (ui = 0; ui < pOID->numids; ui++) {
|
||||
OOTRACEDBGB2 ("%d ", pOID->subid[ui]);
|
||||
}
|
||||
OOTRACEDBGB1 ("}\n");
|
||||
}
|
||||
|
||||
void printOidValue (ASN1UINT numSubIds, ASN1UINT* pSubIds)
|
||||
{
|
||||
ASN1UINT ui;
|
||||
ASN1OBJID oid;
|
||||
oid.numids = numSubIds;
|
||||
|
||||
for ( ui = 0; ui < numSubIds; ui++)
|
||||
oid.subid[ui] = pSubIds[ui];
|
||||
|
||||
indent ();
|
||||
ooPrintOIDValue (&oid);
|
||||
}
|
||||
|
||||
void printRealValue (double value)
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("%f\n", value);
|
||||
}
|
||||
|
||||
void printEnumValue (ASN1UINT value)
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB2 ("%u\n", value);
|
||||
}
|
||||
|
||||
void printOpenTypeValue (ASN1UINT numocts, const ASN1OCTET* data)
|
||||
{
|
||||
indent ();
|
||||
OOTRACEDBGB1 ("< encoded data >\n");
|
||||
}
|
||||
|
||||
static const char* bitStrToString
|
||||
(ASN1UINT numbits, const ASN1OCTET* data, char* buffer, size_t bufsiz)
|
||||
{
|
||||
size_t i;
|
||||
unsigned char mask = 0x80;
|
||||
|
||||
if (bufsiz > 0) {
|
||||
buffer[0] = '\'';
|
||||
for (i = 0; i < numbits; i++) {
|
||||
if (i < bufsiz - 1) {
|
||||
buffer[i+1] = (char) (((data[i/8] & mask) != 0) ? '1' : '0');
|
||||
mask >>= 1;
|
||||
if (0 == mask) mask = 0x80;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
i++;
|
||||
if (i < bufsiz - 1) buffer[i++] = '\'';
|
||||
if (i < bufsiz - 1) buffer[i++] = 'B';
|
||||
if (i < bufsiz - 1) buffer[i] = '\0';
|
||||
else buffer[bufsiz - 1] = '\0';
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static const char* octStrToString
|
||||
(ASN1UINT numocts, const ASN1OCTET* data, char* buffer, size_t bufsiz)
|
||||
{
|
||||
size_t i;
|
||||
char lbuf[4];
|
||||
|
||||
if (bufsiz > 0) {
|
||||
buffer[0] = '\'';
|
||||
if (bufsiz > 1) buffer[1] = '\0';
|
||||
for (i = 0; i < numocts; i++) {
|
||||
if (i < bufsiz - 1) {
|
||||
sprintf (lbuf, "%02x", data[i]);
|
||||
strcat (&buffer[(i*2)+1], lbuf);
|
||||
}
|
||||
else break;
|
||||
}
|
||||
i = i*2 + 1;
|
||||
if (i < bufsiz - 1) buffer[i++] = '\'';
|
||||
if (i < bufsiz - 1) buffer[i++] = 'H';
|
||||
if (i < bufsiz - 1) buffer[i] = '\0';
|
||||
else buffer[bufsiz - 1] = '\0';
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
Reference in New Issue
Block a user