亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sgip.cs

?? SMGP協議對象
?? CS
?? 第 1 頁 / 共 4 頁
字號:
using System;
using System.Collections;
using System.Text;
using System.Runtime.CompilerServices;
using System.Net;

namespace UNSMSGW12API
{
	/// <summary>
	/// 專用SGIP協議中定義的消息由消息頭和消息體組成
	/// </summary>
	public class Command
	{
		#region 命令ID
		public const uint SGIP_BIND = 0x1;
		public const uint SGIP_BIND_RESP = 0x80000001;
		public const uint SGIP_UNBIND = 0x2;
		public const uint SGIP_UNBIND_RESP = 0x80000002;
		public const uint SGIP_SUBMIT = 0x3;
		public const uint SGIP_SUBMIT_RESP = 0x80000003;
		public const uint SGIP_DELIVER = 0x4;
		public const uint SGIP_DELIVER_RESP = 0x80000004;
		public const uint SGIP_REPORT = 0x5;
		public const uint SGIP_REPORT_RESP = 0x80000005;
		public const uint SGIP_ADDSP = 0x6;
		public const uint SGIP_ADDSP_RESP = 0x80000006;
		public const uint SGIP_MODIFYSP = 0x7;
		public const uint SGIP_MODIFYSP_RESP = 0x80000007;
		public const uint SGIP_DELETESP = 0x8;
		public const uint SGIP_DELETESP_RESP = 0x80000008;
		public const uint SGIP_QUERYROUTE = 0x9;
		public const uint SGIP_QUERYROUTE_RESP = 0x80000009;
		public const uint SGIP_ADDTELESEG = 0xa;
		public const uint SGIP_ADDTELESEG_RESP = 0x8000000a;
		public const uint SGIP_MODIFYTELESEG = 0xb;
		public const uint SGIP_MODIFYTELESEG_RESP = 0x8000000b;
		public const uint SGIP_DELETETELESEG = 0xc;
		public const uint SGIP_DELETETELESEG_RESP = 0x8000000c;
		public const uint SGIP_ADDSMG = 0xd;
		public const uint SGIP_ADDSMG_RESP = 0x8000000d;
		public const uint SGIP_MODIFYSMG = 0xe;
		public const uint SGIP_MODIFYSMG_RESP = 0x0000000e;
		public const uint SGIP_DELETESMG = 0xf;
		public const uint SGIP_DELETESMG_RESP = 0x8000000f;
		public const uint SGIP_CHECKUSER = 0x10;
		public const uint SGIP_CHECKUSER_RESP = 0x80000010;
		public const uint SGIP_USERRPT = 0x11;
		public const uint SGIP_USERRPT_RESP = 0x80000011;
		public const uint SGIP_TRACE = 0x1000;
		public const uint SGIP_TRACE_RESP = 0x80001000;
		//下面兩個命令是自定義的
		public const uint SGIP_KEEPALIVE = 0x10000001;
		public const uint SGIP_KEEPALIVE_RESP = 0x10000010;
		#endregion

		#region 錯誤代碼
		/// <summary>
		/// 無錯誤,命令正確接收
		/// </summary>
		public const byte ERR_Success = 0; 
		public const byte ERR_InvalidLogin = 1; //非法登錄,如登錄名、口令出錯、登錄名與口令不符等。
		public const byte ERR_RepeatLogin = 2; //重復登錄,如在同一TCP/IP連接中連續兩次以上請求登錄。
		public const byte ERR_TooMuchLink = 3; //連接過多,指單個節點要求同時建立的連接數過多。
		public const byte ERR_LoginTypeError = 4; //登錄類型錯,指bind命令中的logintype字段出錯。
		public const byte ERR_ParFormatError = 5; //參數格式錯,指命令中參數值與參數類型不符或與協議規定的范圍不符。
		public const byte ERR_InvalidPhone = 6; //非法手機號碼,協議中所有手機號碼字段出現非86130號碼或手機號碼前未加"86"時都應報錯。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
		public const byte ERR_MessageIDError = 7; //消息ID錯
		public const byte ERR_MessageLenError = 8; //信息長度錯
		public const byte ERR_InvalidSerialNo = 9; //非法序列號,包括序列號重復、序列號格式錯誤等
		public const byte ERR_InvalidOper = 10; //非法操作GNS
		public const byte ERR_ComputerBusy = 11; //節點忙,指本節點存儲隊列滿或其他原因,暫時不能提供服務的情況
		public const byte ERR_DestCantReach = 21; //目的地址不可達,指路由表存在路由且消息路由正確但被路由的節點暫時不能提供服務的情況
		public const byte ERR_RoutError = 22; //路由錯,指路由表存在路由但消息路由出錯的情況,如轉錯SMG等
		public const byte ERR_RoutNotExist = 23; //路由不存在,指消息路由的節點在路由表中不存在
		public const byte ERR_FeeNoInvalid = 24; //計費號碼無效,鑒權不成功時反饋的錯誤信息
		public const byte ERR_UserCantCommu = 25; //用戶不能通信(如不在服務區、未開機等情況)
		public const byte ERR_MobileMemoLack = 26; //手機內存不足
		public const byte ERR_MobileNosupportSMG = 27; //手機不支持短消息
		public const byte ERR_MobileReceiError = 28; //手機接收短消息出現錯誤
		public const byte ERR_NoThisUser = 29; //不知道的用戶
		public const byte ERR_NoThisFunction = 30; //不提供此功能
		public const byte ERR_InvalidDevice = 31; //非法設備
		public const byte ERR_SysError = 32; //系統失敗
		public const byte ERR_SMGQueFull = 33; //短信中心隊列滿
		#endregion

		#region 計費類別,參考SGIP1.2協議5.3節
		public const byte FEETYPE_0=0;	//“短消息類型”為“發送”,對“計費用戶號碼”不計信息費,此類話單僅用于核減SP對稱的信道費
		public const byte FEETYPE_1=1;	//對“計費用戶號碼”免費
		public const byte FEETYPE_2=2;	//對“計費用戶號碼”按條計信息費
		public const byte FEETYPE_3=3;	//對“計費用戶號碼”按包月收取信息費
		public const byte FEETYPE_4=4;	//對“計費用戶號碼”的收費是由SP實現
		#endregion


		private Head _head = null;
		private Body _body = null;

		public Head Head
		{
			get { return _head; }
			set { _head = value; }
		}

		public Body Body
		{
			get { return _body; }
			set { _body = value; }
		}

		public int GetLength()
		{
			return _head.GetLength() + _body.GetLength();
		}

		public byte[] GetBytes()
		{
			byte[] result = new byte[this.GetLength()];
			Buffer.BlockCopy(_head.GetBytes(), 0, result, 0, _head.GetLength());
			Buffer.BlockCopy(_body.GetBytes(), 0, result, _head.GetLength(), _body.GetLength());
			return result;
		}

		internal void ReadFromBytes(byte[] buffer, int startIndex)
		{
			_head.ReadFromBytes(buffer, startIndex);
			_body.ReadFromBytes(buffer, startIndex + _head.GetLength());
		}

		/// <summary>
		/// 用戶須調用 ToCommand或CreateCommand方法創建該類的對象
		/// </summary>
		internal Command()
		{
		}

		public static Command ToCommand(byte[] buffer, int startIndex)
		{
			Command cmd = new Command();
			cmd.Head = Head.ToHead(buffer, startIndex);
			switch (cmd.Head.CommandID)
			{
				case Command.SGIP_BIND:
					cmd.Body = new Bind();
					break;
				case Command.SGIP_BIND_RESP:
					cmd.Body = new Bind_Resp();
					break;
				case Command.SGIP_UNBIND:
					cmd.Body = new Unbind();
					break;
				case Command.SGIP_UNBIND_RESP:
					cmd.Body = new Unbind_Resp();
					break;
				case Command.SGIP_SUBMIT:
					cmd.Body = new Submit();
					break;
				case Command.SGIP_SUBMIT_RESP:
					cmd.Body = new Submit_Resp();
					break;
				case Command.SGIP_DELIVER:
					cmd.Body = new Deliver();
					break;
				case Command.SGIP_DELIVER_RESP:
					cmd.Body = new Deliver_Resp();
					break;
				case Command.SGIP_REPORT:
					cmd.Body = new Report();
					break;
				case Command.SGIP_REPORT_RESP:
					cmd.Body = new Report_Resp();
					break;
				case Command.SGIP_TRACE:
					cmd.Body = new Trace();
					break;
				case Command.SGIP_TRACE_RESP:
					cmd.Body = new Trace_Resp();
					break;
				case Command.SGIP_USERRPT:
					cmd.Body = new UserRpt();
					break;
				case Command.SGIP_USERRPT_RESP:
					cmd.Body = new UserRpt_Resp();
					break;
				case Command.SGIP_KEEPALIVE:
					cmd.Body = new KeepAlive();
					break;
				case Command.SGIP_KEEPALIVE_RESP:
					cmd.Body = new KeepAlive_Resp();
					break;
				default:
					throw new InvalidCastException("未知命令!無法解析.");
			} // end of switch
			cmd.Body.ReadFromBytes(buffer, startIndex + cmd.Head.GetLength());
			return cmd;
		}

		/// <summary>
		/// 創建一個命令,多在發送命令時用
		/// </summary>
		/// <param name="body"></param>
		/// <returns></returns>
		public static Command CreateCommand(Body body)
		{
			return Command.CreateCommand(SequenceNumber.CreateSequenceNumber(), body);
		}

		/// <summary>
		/// 創建一個命令(多在應答時用)
		/// </summary>
		/// <param name="sequenceNumber"></param>
		/// <param name="body"></param>
		/// <returns></returns>
		public static Command CreateCommand(SequenceNumber sequenceNumber, Body body)
		{
			Command cmd = new Command();
			cmd.Body = body;

			cmd.Head = new Head();
			cmd.Head.CommandID = body.GetCommandID();
			cmd.Head.MessageLength = (uint)cmd.GetLength();
			cmd.Head.SequenceNumber.Assign(sequenceNumber);

			return cmd;
		}
	}

	/// <summary>
	/// 消息頭的定義,20字節
	/// </summary>
	public class Head
	{
		private uint _messageLength; // 4
		private uint _commandID;    // 4
		private SequenceNumber _sequenceNumber = new SequenceNumber(); //12, 注意:尚未進行正確的賦值

		public uint MessageLength
		{
			get
			{
				return (uint)IPAddress.NetworkToHostOrder((int)_messageLength);
			}
			set
			{
				_messageLength = (uint)IPAddress.HostToNetworkOrder((int)value);
			}
		}

		public uint CommandID
		{
			get
			{
				return (uint)IPAddress.NetworkToHostOrder((int)_commandID);
			}
			set
			{
				_commandID = (uint)IPAddress.HostToNetworkOrder((int)value);
			}
		}

		public SequenceNumber SequenceNumber
		{
			get { return _sequenceNumber; }
			set { _sequenceNumber = value; }
		}

		public Head()
		{
		}

		/// <summary>
		/// 返回byte[], 用于socket發送
		/// </summary>
		/// <returns></returns>
		public byte[] GetBytes()
		{
			byte[] result = new byte[this.GetLength()];
			int nIndex = 0;
			BitConverter.GetBytes(_messageLength).CopyTo(result, nIndex);
			nIndex += 4;
			BitConverter.GetBytes(_commandID).CopyTo(result, nIndex);
			nIndex += 4;
			_sequenceNumber.GetBytes().CopyTo(result, nIndex);
			return result;
		}

		/// <summary>
		/// 從byte[]中讀取數據
		/// </summary>
		/// <param name="buffer"></param>
		/// <param name="startIndex"></param>
		internal void ReadFromBytes(byte[] buffer, int startIndex)
		{
			_messageLength = BitConverter.ToUInt32(buffer, startIndex);
			_commandID = BitConverter.ToUInt32(buffer, startIndex + 4);
			_sequenceNumber.ReadFromBytes(buffer, startIndex + 8);
		}

		public static Head ToHead(byte[] buffer, int startIndex)
		{
			Head head = new Head();
			head.ReadFromBytes(buffer, startIndex);
			return head;
		}

		/// <summary>
		/// 返回head這一結構所占用的字節數
		/// </summary>
		/// <returns></returns>
		public int GetLength()
		{
			return 20;
		}
	};

	public class Body
	{
		public virtual uint GetCommandID()
		{
			return 0;
		}

		public virtual int GetLength()
		{
			return 0;
		}

		public virtual byte[] GetBytes()
		{
			return new byte[0];
		}

		internal virtual void ReadFromBytes(byte[] buffer, int startIndex)
		{
		}
	}

	public class ResponseBody : Body
	{
		private byte _result;
		private byte[] _reserved = new byte[8]{0,0,0,0,0,0,0,0};

		/// <summary>
		/// Bind執行命令是否成功。0:執行成功, 其它:錯誤碼
		/// </summary>
		public byte Result
		{
			get
			{
				return _result;
			}
			set
			{
				_result = value;
			}
		}

		/// <summary>
		/// 保留,最多8個字節
		/// </summary>
		public byte[] Reserved
		{
			get { return _reserved; }
			set
			{
				apiHelper.CheckMaxBytes(value, 8);
				_reserved = value;
			}
		}

		public override int GetLength()
		{
			return 9;
		}

		public override byte[] GetBytes()
		{
			byte[] buffer = new byte[this.GetLength()];
			buffer[0] = _result;
			_reserved.CopyTo(buffer, 1);
			return buffer;
		}

		internal override void ReadFromBytes(byte[] buffer, int startIndex)
		{
			_result = buffer[startIndex];
			Buffer.BlockCopy(buffer, 1, _reserved, 0, 8);
		}

	}

	/// <summary>
	/// 序列號, 參見: 3.4序列號的定義, 12字節
	/// </summary>
	public class SequenceNumber
	{
		//保存的值將是網絡字節順序的值
		private uint _part1;
		private uint _part2;
		private uint _part3;
		private static uint _Sequence = 0; //用于第3部分,序號計數

		public uint Part1
		{
			get
			{
				return (uint)IPAddress.NetworkToHostOrder((int)_part1);
			}
			set
			{
				_part1 = (uint)IPAddress.HostToNetworkOrder((int)value);
			}
		}

		public uint Part2
		{
			get
			{
				return (uint)IPAddress.NetworkToHostOrder((int)_part2);
			}
			set
			{
				_part2 = (uint)IPAddress.HostToNetworkOrder((int)value);
			}
		}

		public uint Part3
		{
			get
			{
				return (uint)IPAddress.NetworkToHostOrder((int)_part3);
			}
			set
			{
				_part3 = (uint)IPAddress.HostToNetworkOrder((int)value);
			}
		}

		/// <summary>
		/// 將另一個序列號賦值給自已, 這在消息應答時用
		/// </summary>
		/// <param name="r"></param>
		public void Assign(SequenceNumber r)
		{
			this._part1 = r._part1;
			this._part2 = r._part2;
			this._part3 = r._part3;
		}

		/// <summary>
		/// 返回所占用的字節數
		/// </summary>
		/// <returns></returns>
		public int GetLength()
		{
			return 12;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产另类不卡| 国产精品国产精品国产专区不片 | 国内精品久久久久影院色| 国产福利一区二区三区视频| 91福利在线观看| 中文字幕成人网| 久久国内精品视频| 欧美日韩国产小视频在线观看| 国产欧美一区二区三区网站| 久久精品国产久精国产爱| 欧美日韩中文字幕一区二区| 亚洲欧洲日韩一区二区三区| 国产精品系列在线观看| 日韩免费视频一区| 视频一区视频二区中文| 欧美自拍偷拍一区| 亚洲精品中文字幕乱码三区| 成人精品小蝌蚪| 国产亚洲精品aa午夜观看| 看片的网站亚洲| 日韩一区二区电影| 日日夜夜精品免费视频| 欧美卡1卡2卡| 香蕉成人啪国产精品视频综合网| 欧美最新大片在线看| 亚洲男人的天堂网| 一本色道久久综合亚洲91| 综合在线观看色| 在线亚洲高清视频| 亚洲综合色区另类av| 欧美主播一区二区三区| 国产在线精品一区二区不卡了| 欧美日韩国产高清一区二区| 亚洲成人激情自拍| 欧美美女激情18p| 日韩高清不卡一区二区三区| 91麻豆精品国产综合久久久久久| 日本va欧美va欧美va精品| 日韩午夜激情视频| 韩国三级中文字幕hd久久精品| 精品动漫一区二区三区在线观看 | 亚洲人成小说网站色在线 | 久久国产福利国产秒拍| 精品国精品自拍自在线| 国产精品综合一区二区三区| 国产欧美一区二区精品性色超碰| 国产91精品久久久久久久网曝门| 国产精品成人一区二区艾草| 一本到不卡精品视频在线观看| 夜夜夜精品看看| 4438x成人网最大色成网站| 精品一区二区三区免费视频| 欧美经典一区二区三区| 99re成人在线| 午夜视频一区在线观看| 日韩一区和二区| 成人av综合在线| 性感美女极品91精品| 日韩无一区二区| 成人高清av在线| 亚洲成人资源在线| 久久久不卡网国产精品二区| 91麻豆免费观看| 免费高清视频精品| 18成人在线观看| 日韩小视频在线观看专区| 成人一级视频在线观看| 亚洲无人区一区| 国产精品色哟哟| 欧美一区二区三区播放老司机| 丁香婷婷深情五月亚洲| 亚洲成人av一区二区三区| 久久先锋影音av鲁色资源| 欧美优质美女网站| 国产一区二区三区在线观看免费视频| 综合欧美亚洲日本| 欧美不卡123| 欧美日韩在线不卡| 99视频超级精品| 国产一区二区三区免费播放| 亚洲综合一二区| 中文字幕国产精品一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 九色porny丨国产精品| 亚洲欧美偷拍卡通变态| 久久久精品国产99久久精品芒果| 欧美性xxxxx极品少妇| 国产成人8x视频一区二区| 日本vs亚洲vs韩国一区三区| 一区二区国产视频| 欧美经典一区二区| 欧美刺激午夜性久久久久久久| 欧美色综合久久| 99久久伊人精品| 成人午夜看片网址| 久久99精品久久久久久动态图 | 91亚洲国产成人精品一区二区三| 老鸭窝一区二区久久精品| 亚洲动漫第一页| 一区二区三区欧美视频| 日韩久久一区二区| 国产日韩精品视频一区| 久久在线观看免费| 欧美精品一区二区久久婷婷| 日韩一区二区精品在线观看| 欧美区在线观看| 欧美美女喷水视频| 在线91免费看| 日韩一本二本av| 日韩精品影音先锋| 精品国产自在久精品国产| 精品国产乱码久久久久久浪潮| 欧美狂野另类xxxxoooo| 欧美精品第一页| 欧美一级理论性理论a| 在线不卡免费欧美| 欧美一区二区三区免费在线看| 538在线一区二区精品国产| 欧美精品色综合| 日韩一区二区三区免费观看| 日韩色视频在线观看| 精品sm捆绑视频| 国产性色一区二区| 中文字幕中文乱码欧美一区二区| 中文字幕一区二区三区不卡| 亚洲欧洲综合另类| 亚洲r级在线视频| 日本在线不卡视频一二三区| 久久精品噜噜噜成人av农村| 国产精品99久久久| 99精品欧美一区二区蜜桃免费| 色狠狠一区二区三区香蕉| 欧美女孩性生活视频| 欧美大片国产精品| 亚洲国产精品黑人久久久| 最好看的中文字幕久久| 亚洲成a人v欧美综合天堂下载| 精品一区二区在线视频| 激情综合一区二区三区| 国产一二精品视频| 色悠久久久久综合欧美99| 91麻豆精品国产91久久久久久久久 | 日日嗨av一区二区三区四区| 视频一区二区三区中文字幕| 国产一区二区三区日韩| 99久久国产综合精品色伊| 欧美人牲a欧美精品| 国产亚洲女人久久久久毛片| 一区二区三区四区不卡在线 | 欧美高清你懂得| 久久久亚洲精华液精华液精华液| 国产精品福利在线播放| 日日夜夜一区二区| aaa欧美大片| 日韩免费观看高清完整版| 亚洲婷婷综合色高清在线| 日韩不卡一二三区| 波多野结衣视频一区| 69精品人人人人| 综合婷婷亚洲小说| 精品一区二区三区在线观看| 色综合夜色一区| www激情久久| 亚洲国产日韩a在线播放性色| 国产精品18久久久久| 欧美日韩国产一级片| 日韩美女久久久| 国产精品亚洲第一| 制服丝袜亚洲播放| 国产精品毛片无遮挡高清| 蜜桃视频在线一区| 欧美在线一二三| 亚洲丝袜美腿综合| 国产一区二区视频在线播放| 欧美丰满少妇xxxxx高潮对白 | 中文字幕一区二区三区四区不卡 | 日本成人在线网站| 日本精品免费观看高清观看| 国产日韩欧美一区二区三区乱码| 日本成人中文字幕| 欧美理论在线播放| 一区二区三区精品| eeuss鲁片一区二区三区在线看| 久久夜色精品国产噜噜av| 老汉av免费一区二区三区| 欧美日韩一区二区在线视频| 中文字幕字幕中文在线中不卡视频| 国产大陆亚洲精品国产| 久久嫩草精品久久久精品一| 蜜臂av日日欢夜夜爽一区| 欧美日韩成人高清| 亚洲狠狠爱一区二区三区| 在线观看av不卡| 亚洲成av人影院在线观看网| 在线精品国精品国产尤物884a| 中文字幕欧美一区| aaa欧美大片| 亚洲精品第一国产综合野| 一本久久综合亚洲鲁鲁五月天| 综合久久久久综合|