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 + -
显示快捷键?