View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000141 | easycwmp | Help | public | 2016-06-14 12:49 | 2022-12-14 17:10 |
Reporter | stone1223 | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | new | Resolution | open | ||
Summary | 0000141: Could not talk with ACS. Receive Empty message from ACS. | ||||
Description | I 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 | ||||
Tags | No tags attached. | ||||
e-mail notification | |||||
|
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 |
|
what is your ACS? |
|
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. |
|
You have to change it in microxml |
|
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; } |
|
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... |
|
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. |
|
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); |
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 |