View Issue Details

IDProjectCategoryView StatusLast Update
0000141easycwmpHelppublic2022-12-14 17:10
Reporterstone1223 Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Summary0000141: Could not talk with ACS. Receive Empty message from ACS.
DescriptionI have device running easycwmp. It works fine against test ACS. But when I change to another ACS which I have not full control. It has problems, that I doesn't appear to the ACS. I don't know what could be the reason. The log is like below:

2016-04-04 17:24:05 [easycwmp] NOTICE - add event '0 BOOTSTRAP'
2016-04-04 17:24:05 [easycwmp] NOTICE - add event '2 PERIODIC'
2016-04-04 17:24:05 [easycwmp] NOTICE - external script init
config_init_local(65):: easycwmp.@local[0].port=7547
config_init_local(83):: easycwmp.@local[0].ubus_socket=/var/run/ubus.sock
config_init_local(94):: easycwmp.@local[0].logging_level=3
config_init_local(71):: easycwmp.@local[0].username=xxx
config_init_local(77):: easycwmp.@local[0].password=xxx
config_init_local(55):: easycwmp.@local[0].interface=pppoe-wan
config_init_acs(177):: easycwmp.@acs[0].periodic_enable=1
config_init_acs(183):: easycwmp.@acs[0].periodic_interval=3600
config_init_acs(190):: easycwmp.@acs[0].periodic_time=0001-01-01T00:00:00Z
config_init_acs(165):: easycwmp.@acs[0].username=xxx
config_init_acs(171):: easycwmp.@acs[0].password=xxx
config_init_acs(159):: easycwmp.@acs[0].url=xxx
2016-04-04 17:24:05 [easycwmp] NOTICE - init periodic inform: reference time = n/a, interval = 3600
2016-04-04 17:24:05 [easycwmp] NOTICE - external: execute update_value_change (null)
2016-04-04 17:24:05 [easycwmp] NOTICE - daemon started
2016-04-04 17:24:05 [easycwmp] NOTICE - external: execute inform device_id
2016-04-04 17:24:06 [easycwmp] NOTICE - external script exit
2016-04-04 17:24:06 [easycwmp] NOTICE - add event '2 PERIODIC'
2016-04-04 17:24:06 [easycwmp] NOTICE - interface pppoe-wan has ip 184.22.148.140
+++ HTTP SERVER CONFIGURATION +++
ip: 'x.x.x.x'
port: '7547'
--- HTTP SERVER CONFIGURATION ---
2016-04-04 17:24:06 [easycwmp] NOTICE - http server initialized
root@xxx:/etc/easycwmp# 2016-04-04 17:24:06 [easycwmp] NOTICE - entering main loop
2016-04-04 17:24:06 [easycwmp] NOTICE - start session
+++ HTTP CLIENT CONFIGURATION +++
http_client_init(50):: url: xxx
http_client_init(56):: ssl_verify: SSL certificate validation disabled.
--- HTTP CLIENT CONFIGURATION ---
2016-04-04 17:24:06 [easycwmp] NOTICE - configured acs url xxx
2016-04-04 17:24:06 [easycwmp] NOTICE - external script init
2016-04-04 17:24:06 [easycwmp] NOTICE - external: execute inform parameter
2016-04-04 17:24:06 [easycwmp] NOTICE - send Inform
+++ SEND HTTP REQUEST +++
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap_env:Envelope
xmlns:soap_env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap_enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cwmp="urn:dslforum-org:cwmp-1-2">
  <soap_env:Header>
   <cwmp:ID soap_env:mustUnderstand="1">1</cwmp:ID>
  </soap_env:Header>
  <soap_env:Body>
   <cwmp:Inform>
    <DeviceId>
     <Manufacturer>XXX</Manufacturer>
     <OUI>000000</OUI>
     <ProductClass>XXX</ProductClass>
     <SerialNumber>FFFFFF123456</SerialNumber>
    </DeviceId>
   <Event soap_enc:arrayType="cwmp:EventStruct[2]">
     <EventStruct>
      <EventCode>0 BOOTSTRAP</EventCode>
      <CommandKey />
     </EventStruct>
     <EventStruct>
      <EventCode>2 PERIODIC</EventCode>
      <CommandKey />
     </EventStruct>
    </Event>
    <MaxEnvelopes>1</MaxEnvelopes>
    <CurrentTime>2016-04-04T17:24:06+07:00</CurrentTime>
    <RetryCount>0</RetryCount>
    <ParameterList soap_enc:arrayType="cwmp:ParameterValueStruct[11]">
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.HardwareVersion</Name>
      <Value xsi:type="xsd:string">CPE XXX</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.Manufacturer</Name>
      <Value xsi:type="xsd:string">XXX</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.ManufacturerOUI</Name>
      <Value xsi:type="xsd:string">000000</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.ProductClass</Name>
      <Value xsi:type="xsd:string">xxx</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.ProvisioningCode</Name>
      <Value xsi:type="xsd:string"></Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.SerialNumber</Name>
      <Value xsi:type="xsd:string">FFFFFF123456</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.SoftwareVersion</Name>
      <Value xsi:type="xsd:string">CPE XXXF</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.DeviceInfo.SpecVersion</Name>
      <Value xsi:type="xsd:string">1.0</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.ManagementServer.ConnectionRequestURL</Name>
      <Value xsi:type="xsd:string">http://x.x.x.x:7547/</Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.ManagementServer.ParameterKey</Name>
      <Value xsi:type="xsd:string"></Value>
     </ParameterValueStruct>
     <ParameterValueStruct>
      <Name>InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress</Name>
      <Value xsi:type="xsd:string"></Value>
     </ParameterValueStruct>
    </ParameterList>
   </cwmp:Inform>
  </soap_env:Body>
</soap_env:Envelope>
--- SEND HTTP REQUEST ---
> POST /fbb-sbn HTTP/1.1
Host: xxx
User-Agent: easycwmp
Content-Type: text/html; charset="utf-8"
SOAPAction:
Content-Length: 3200
Expect: 100-continue
 
< HTTP/1.1 100 Continue
< HTTP/1.1 204 No Content
< Server: nginx
< Date: Mon, 04 Apr 2016 10:24:06 GMT
< Content-Type: text/xml;charset=UTF-8
< Connection: keep-alive
< Set-Cookie: AOS_WEB_JSESSIONID=1w6rrcosek6qwkijqcu2z0aop;Path=/;HttpOnly
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< SOAPAction: ""
<
+++ RECEIVED EMPTY HTTP RESPONSE +++
rpc_inform(223): parse Inform xml message from ACS: Empty message
2016-04-04 17:24:06 [easycwmp] NOTICE - sending Inform failed
2016-04-04 17:24:06 [easycwmp] NOTICE - external: execute apply service
2016-04-04 17:24:06 [easycwmp] NOTICE - external script exit
2016-04-04 17:24:06 [easycwmp] NOTICE - end session failed
2016-04-04 17:24:06 [easycwmp] NOTICE - retry session in 7 sec, RetryCount = 1
2016-04-04 17:24:14 [easycwmp] NOTICE - start session

TagsNo tags attached.
e-mail notification

Activities

mohamed.kallel

2016-06-16 10:55

administrator   ~0000483

Your ACS send empty message (http 204) after receiving Inform from CPE. I do not know if a some behaviour is allowed in the TR-069 because as I know the ACS should send InformResponse message when he get Inform message from the CPE

mohamed.kallel

2016-06-16 10:57

administrator   ~0000484

what is your ACS?

stone1223

2016-06-17 12:56

reporter   ~0000486

Hi, it is a commercial ACS. I found the problem is here:

<soap_env:Envelope
xmlns:soap_env="http://schemas.xmlsoap.org/soap/envelope/" [^]
xmlns:soap_enc="http://schemas.xmlsoap.org/soap/encoding/" [^]
xmlns:xsd="http://www.w3.org/2001/XMLSchema" [^]
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" [^]
xmlns:cwmp="urn:dslforum-org:cwmp-1-2">

The attributes are separated by [CR] [LF]. The ACS cannot parse the attribute with it. I should change the separator to [SPACE]. I tried to change in message.h. But it seems not the correct one. How could I change it to SPACE, is this part of the libmicroxml, including the function mxmlLoadString()?

Thank you.

mohamed.kallel

2016-06-17 14:15

administrator   ~0000487

You have to change it in microxml

chengang

2021-06-30 05:43

reporter   ~0001028

I solved a similar problem, The attributes are separated by [LF],I changed the separator to [SPACE]:
I fixed a fun according mohamed.kallel's suggestion
In mxml_write_node() of microxml
for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
         i > 0;
         i --, attr ++)
    {
      width = strlen(attr->name);

      if (attr->value)
        width += strlen(attr->value) + 3;

      if (global->wrap > 0 && (col + width) > global->wrap)
      {
        //fixed
        //if ((*putc_cb)('\n', p) < 0)
        if ((*putc_cb)(' ', p) < 0)
          return (-1);

        col = 0;
      }

hmh

2022-12-14 16:23

reporter   ~0001048

Well, that ACS' XML parsing is crap, plain and simple. But that's hardly surprising.

Really, it would make more sense for CWMP to ask libmicroxml to generate non-formatted XML, but when you do that, you also risk hitting line-length limits on broken quasi-XML parses.

Someone in github had the idea of adding a space after the linefeed, instead of replacing the linefeed with a space. This would work with parsers that skip one and require the other, AND avoid generating long lines.

But it won't work on parsers that can't handle LF separators at all...

hmh

2022-12-14 17:08

reporter   ~0001049

FWIW:
https://github.com/pivasoftware/microxml/pull/5


Note that I don't have any such broken ACS'es around here to test if this is enough to fix things.

Will also attach the patch here.

hmh

2022-12-14 17:10

reporter   ~0001050

diff --git a/mxml-file.c b/mxml-file.c
index 02eca9d..4875189 100644
--- a/mxml-file.c
+++ b/mxml-file.c
@@ -2790,13 +2790,11 @@ mxml_write_node(mxml_node_t *node, /* I - Node to write */

col = 0;
}
- else
- {
- if ((*putc_cb)(' ', p) < 0)
- return (-1);

- col ++;
- }
+ /* https://support.easycwmp.org/view.php?id=141 */
+ if ((*putc_cb)(' ', p) < 0)
+ return (-1);
+ col ++;

if (mxml_write_name(attr->name, p, putc_cb) < 0)
return (-1);

Issue History

Date Modified Username Field Change
2016-06-14 12:49 stone1223 New Issue
2016-06-16 10:55 mohamed.kallel Note Added: 0000483
2016-06-16 10:57 mohamed.kallel Note Added: 0000484
2016-06-17 12:56 stone1223 Note Added: 0000486
2016-06-17 14:15 mohamed.kallel Note Added: 0000487
2021-06-30 05:43 chengang Note Added: 0001028
2022-12-14 16:23 hmh Note Added: 0001048
2022-12-14 17:08 hmh Note Added: 0001049
2022-12-14 17:10 hmh Note Added: 0001050