网络通信协议TLV解析器

本文档提供了一个网络通信中使用的TLV协议解析器的实现。代码包括了不同数据类型的转换函数,如htonl、ntohl等,并定义了不同类型的TLV容器,如tlv_44、tlv_24等。此外,还提供了数据的压入和获取方法,支持将数据解码为字节序列或从字节序列中编码。
摘要由CSDN通过智能技术生成


/*
* Copyright (c) 2005-2010 Tony Zhengjq <zhengjq@163.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
*    derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

//tlv协议
#ifndef _TLV_H_
#define _TLV_H_

#pragma warning(disable: 4018 4244)

#ifndef int64_t
#define int64_t   long long
#endif

#ifndef uint64_t
#define uint64_t  unsigned long long
#endif

// host long 64 to network
static uint64_t hl64ton(uint64_t host)
{
 uint64_t   ret = 0;  
 unsigned long high,low;
 low = host & 0xFFFFFFFF;
 high = (host >> 32) & 0xFFFFFFFF;
 low = htonl(low);
 high = htonl(high);
 ret = low;
 ret <<= 32;
 ret |= high;
 return ret;
}

//network to host long 64
static uint64_t ntohl64(uint64_t host)
{
 uint64_t ret = 0;
 unsigned long high,low;
 low = host & 0xFFFFFFFF;
 high =  (host >> 32) & 0xFFFFFFFF;
 low = ntohl(low);
 high = ntohl(high);
 ret = low;
 ret <<= 32;
 ret |= high;
 return ret;
}

namespace TLV
{
 //分配内存部件
 template <class _L>
 class alloc_block
 {
 public:
  alloc_block(void* v, _L n) :_n(n) { _v = malloc(_n + 1); memcpy(_v, v, _n); ((char*)_v)[_n] = 0;}
  ~alloc_block() { free(_v); }
  static bool alloc() {return true;}
  void* _v; _L _n;
 };

 //不分配内存部件
 template <class _L>
 class block

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值