context.c

来自「一个非常美妙的proxy。功能强大。基于sip的协议。如果还要的话」· C语言 代码 · 共 141 行

C
141
字号
/* * Copyright (C) 1997-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. * *****************************************************************************/#include "ooasn1.h"#include <stdlib.h>int initContext (OOCTXT* pctxt){   memset (pctxt, 0, sizeof(OOCTXT));   memHeapCreate (&pctxt->pTypeMemHeap);   pctxt->pMsgMemHeap = pctxt->pTypeMemHeap;   memHeapAddRef (&pctxt->pMsgMemHeap);   return ASN_OK;}int initContextBuffer (OOCTXT* pctxt, const ASN1OCTET* bufaddr, ASN1UINT bufsiz){   if (bufaddr == 0) {      /* dynamic buffer */      if (bufsiz == 0) bufsiz = ASN_K_ENCBUFSIZ;      pctxt->buffer.data = (ASN1OCTET*)          memHeapAlloc (&pctxt->pMsgMemHeap, bufsiz);      if (!pctxt->buffer.data) return ASN_E_NOMEM;      pctxt->buffer.size = bufsiz;      pctxt->buffer.dynamic = TRUE;   }   else {      /* static buffer */      pctxt->buffer.data = (ASN1OCTET*) bufaddr;      pctxt->buffer.size = bufsiz;      pctxt->buffer.dynamic = FALSE;   }   pctxt->buffer.byteIndex = 0;   pctxt->buffer.bitOffset = 8;   return ASN_OK;}int initSubContext (OOCTXT* pctxt, OOCTXT* psrc) {   int stat = ASN_OK;   memset (pctxt, 0, sizeof(OOCTXT));   pctxt->pTypeMemHeap = psrc->pTypeMemHeap;   memHeapAddRef (&pctxt->pTypeMemHeap);   pctxt->pMsgMemHeap = psrc->pMsgMemHeap;   memHeapAddRef (&pctxt->pMsgMemHeap);   pctxt->flags = psrc->flags;   pctxt->buffer.dynamic = TRUE;   pctxt->buffer.byteIndex = 0;   pctxt->buffer.bitOffset = 8;   return stat;}void freeContext (OOCTXT* pctxt){   ASN1BOOL saveBuf = (pctxt->flags & ASN1SAVEBUF) != 0;      if (pctxt->buffer.dynamic && pctxt->buffer.data) {      if (saveBuf) {         memHeapMarkSaved (&pctxt->pMsgMemHeap, pctxt->buffer.data, TRUE);      }      else {         memHeapFreePtr (&pctxt->pMsgMemHeap, pctxt->buffer.data);      }   }   errFreeParms (&pctxt->errInfo);   memHeapRelease (&pctxt->pTypeMemHeap);   memHeapRelease (&pctxt->pMsgMemHeap);}void copyContext (OOCTXT* pdest, OOCTXT* psrc){   memcpy (&pdest->buffer, &psrc->buffer, sizeof(ASN1BUFFER));   pdest->flags = psrc->flags;}void setCtxtFlag (OOCTXT* pctxt, ASN1USINT mask){   pctxt->flags |= mask;}void clearCtxtFlag (OOCTXT* pctxt, ASN1USINT mask){   pctxt->flags &= ~mask;}int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource){   int stat = initContextBuffer       (pTarget, pSource->buffer.data, pSource->buffer.size);   if (ASN_OK == stat) {      pTarget->buffer.byteIndex = pSource->buffer.byteIndex;      pTarget->buffer.bitOffset = pSource->buffer.bitOffset;   }   return stat;}int setPERBuffer (OOCTXT* pctxt,                  ASN1OCTET* bufaddr, ASN1UINT bufsiz, ASN1BOOL aligned){   int stat = initContextBuffer (pctxt, bufaddr, bufsiz);   if(stat != ASN_OK) return stat;      return ASN_OK;}OOCTXT* newContext () {   OOCTXT* pctxt = (OOCTXT*) ASN1CRTMALLOC0 (sizeof(OOCTXT));   if (pctxt) {      if (initContext(pctxt) != ASN_OK) {         ASN1CRTFREE0 (pctxt);         pctxt = 0;      }      pctxt->flags |= ASN1DYNCTXT;   }   return (pctxt);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?