Beispiel #1
0
        public CmppSubmit Cmpp2CmppSubmitPack(string content,
                                              string extendedCode,
                                              string[] destinations,
                                              bool isLongMessage,
                                              int count,
                                              int serial)
        {
            var        needStatusReport = true;
            CmppSubmit submit           = new CmppSubmit();

            submit.MsgContent         = content;
            submit.MsgFmt             = (byte)(CmppEncoding.UCS2);
            submit.SrcId              = extendedCode;
            submit.DestTerminalId     = destinations;
            submit.ServiceId          = Config.ServiceId;
            submit.RegisteredDelivery = (byte)(needStatusReport ? 1 : 0);
            submit.FeeType            = string.Format("{0:D2}", (int)FeeType.Free);
            submit.FeeUserType        = (byte)FeeUserType.SP;
            submit.FeeTerminalId      = "0";
            submit.FeeCode            = "05";
            submit.MsgLevel           = 0;
            submit.TPPId              = 0;
            submit.TPUdhi             = (byte)(isLongMessage ? 1 : 0);
            submit.PkTotal            = (byte)count;
            submit.PkNumber           = (byte)serial;
            submit.MsgSrc             = Config.SourceAddress;
            submit.ValidTime          = "";
            submit.AtTime             = "";
            submit.Reserve            = "0";

            return(submit);
        }
Beispiel #2
0
        private CmppWindow _SendAsync(
            string extendedCode,
            string[] destinations,
            string text,
            bool isLongMessage, bool needStatusReport)
        {
            var submit = new CmppSubmit
            {
                // 信息内容。
                MsgContent = text,
                // 信息编码。
                MsgFmt = (byte)(_config.AttemptRemoveSignature ? CmppEncoding.Special : CmppEncoding.UCS2),
                // SP的服务代码,将显示在最终用户手机上的短信主叫号码。
                SrcId = _config.SpCode + extendedCode,
                // 接收短信的电话号码列表。
                DestTerminalId = destinations,
                // 业务标识(如:woodpack)。
                ServiceId = _config.ServiceId,
                // 是否要求返回状态报告。
                RegisteredDelivery = (byte)(needStatusReport ? 1 : 0),
                // 资费类别。
                FeeType = string.Format("{0:D2}", (int)FeeType.Free),
                // 计费用户。
                FeeUserType = (byte)FeeUserType.SP,
                // 被计费的号码(feeUserType 值为 FeeUser 时有效)。
                FeeTerminalId = _config.SpCode,
                // 被计费号码的真实身份(“真实号码”或“伪码”)。
                FeeTerminalType = 0,
                // 信息费(以“分”为单位,如:10 分代表 1角)。
                FeeCode = "05",
                // 点播业务的 linkId。
                LinkId   = "",
                MsgLevel = 0,
                TPPId    = 0,
                TPUdhi   = (byte)(isLongMessage ? 1 : 0),
                MsgSrc   = string.IsNullOrWhiteSpace(_config.SpId) ?
                           _config.GatewayUsername : _config.SpId,
                ValidTime = "",
                AtTime    = ""
            };
            var window = new CmppWindow
            {
                Message    = submit,
                WaitHandle = new ManualResetEvent(false)
            };

            lock (_pendingMessages)
                _pendingMessages.Enqueue(window);
            return(window);
        }
Beispiel #3
0
        public void TestProtocol()
        {
            using (var client = new TcpClient(_config.GatewayIp, _config.GatewayPort))
            {
                var dt = DateTime.Now;
                SendMessage(client.Client, new CmppConnect
                {
                    TimeStamp           = uint.Parse(string.Format("{0:MMddhhmmss}", dt)),
                    AuthenticatorSource = CreateAuthenticatorSource(dt),
                    Version             = CmppConstants.Version,
                    SourceAddress       = _config.GatewayUsername,
                });
                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                var buffer = new byte[12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                var head = new CmppHead();
                head.FromBytes(buffer);
                Assert.AreEqual(CmppConstants.CommandCode.ConnectResp, head.CommandId);

                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                buffer = new byte[head.TotalLength - 12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                var response = new CmppConnectResp();
                response.FromBytes(buffer);
                Assert.AreEqual(0, response.Status);
                // connected
                SendMessage(client.Client, new CmppActiveTest());

                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                buffer = new byte[12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                head = new CmppHead();
                head.FromBytes(buffer);
                Assert.AreEqual(CmppConstants.CommandCode.ActiveTestResp, head.CommandId);

                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                buffer = new byte[head.TotalLength - 12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                var active = new CmppActiveTestResp();
                active.FromBytes(buffer);

                Console.WriteLine("Sending message.");
                var submit = new CmppSubmit
                {
                    // 信息内容。
                    MsgContent = "Test",
                    // 信息编码。
                    MsgFmt = (byte)CmppEncoding.UCS2,
                    // SP的服务代码,将显示在最终用户手机上的短信主叫号码。
                    SrcId = _config.SpCode + "1111",
                    // 接收短信的电话号码列表。
                    DestTerminalId = new[] { "13800138000" },
                    // 业务标识(如:woodpack)。
                    ServiceId = _config.ServiceId,
                    // 是否要求返回状态报告。
                    RegisteredDelivery = 1,
                    // 资费类别。
                    FeeType = string.Format("{0:D2}", (int)FeeType.Free),
                    // 计费用户。
                    FeeUserType = (byte)FeeUserType.SP,
                    // 被计费的号码(feeUserType 值为 FeeUser 时有效)。
                    FeeTerminalId = _config.SpCode,
                    // 被计费号码的真实身份(“真实号码”或“伪码”)。
                    FeeTerminalType = 0,
                    // 信息费(以“分”为单位,如:10 分代表 1角)。
                    FeeCode = "10",
                    // 点播业务的 linkId。
                    LinkId    = "",
                    PkTotal   = (byte)(_config.AttemptRemoveSignature ? 3 : 1),
                    PkNumber  = (byte)(_config.AttemptRemoveSignature ? 2 : 1),
                    MsgLevel  = 0,
                    TPPId     = 0,
                    TPUdhi    = 0,
                    MsgSrc    = _config.GatewayUsername,
                    ValidTime = "",
                    AtTime    = ""
                };
                SendMessage(client.Client, submit);

                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                buffer = new byte[12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                head = new CmppHead();
                head.FromBytes(buffer);
                Assert.AreEqual(CmppConstants.CommandCode.SubmitResp, head.CommandId);

                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                buffer = new byte[head.TotalLength - 12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                var submitResponse = new CmppSubmitResp();
                submitResponse.FromBytes(buffer);
                Assert.AreEqual(0, submitResponse.Result);

                Console.WriteLine("Waiting for message report.");

                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                buffer = new byte[12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                head = new CmppHead();
                head.FromBytes(buffer);
                Assert.AreEqual(CmppConstants.CommandCode.Deliver, head.CommandId);

                Assert.True(client.Client.Poll(-1, SelectMode.SelectRead));
                buffer = new byte[head.TotalLength - 12];
                Assert.AreEqual(buffer.Length, client.Client.Receive(buffer));
                var deliver = new CmppDeliver();
                deliver.FromBytes(buffer);
                Assert.AreEqual(1, deliver.RegisteredDelivery);
                var report = deliver.GetReport();
                Assert.AreEqual(submitResponse.MsgId, report.MsgId);

                Console.WriteLine("Message report: [{0}] {1}", report.MsgId, report.Stat);
            }
        }