Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
492ee57
add u8g.fb_rle display
devsaurus Sep 20, 2016
837cf20
move comm drivers to u8g_glue.c
devsaurus Sep 20, 2016
c273280
disable fb_rle per default
devsaurus Sep 28, 2016
a86fb74
implement file.size for spiffs (#1516)
devsaurus Oct 3, 2016
90c6e86
Fix start-up race between UART & start_lua. (#1522)
Oct 3, 2016
088d2c3
Reimplemented esp_init_data_default.
jmattsson Oct 4, 2016
407eaa4
Replace hardcoded init data with generated data from SDK
jimparis Oct 4, 2016
948661d
Rework flashing instructions
jimparis Oct 3, 2016
9d87074
Merge pull request #1527 from jimparis/rfcal_ne_0x05_initdata_fix_auto
Oct 6, 2016
d9b10a7
Fix typo
marcelstoer Oct 10, 2016
025805b
Fixes the gpio.serout problem from #1534 (#1535)
pjsg Oct 11, 2016
b8e0012
fix dereferencing NULL pointer in vfs_errno() (#1539)
devsaurus Oct 13, 2016
101eb20
add map ids for flash sizes 32m-c2, 64m, 128m in user_rf_cal_sector_s…
devsaurus Oct 13, 2016
880bd98
Somfy/TELIS driver (#1521)
vsky279 Oct 13, 2016
f9533ed
Reduced LUAL_BUFFERSIZE to 256. Should free up some stack (#1530)
pjsg Oct 16, 2016
020afdc
avoid task queue overrun for serial input (#1540)
devsaurus Oct 18, 2016
6e38cc4
Increase irom0_0_seg size for PR build
marcelstoer Oct 24, 2016
0ee1ab6
Improve reliability of FS detection. (#1528)
pjsg Oct 25, 2016
ebb537c
Version of printf that doesn't suffer from buffer overflows (#1564)
pjsg Oct 27, 2016
2227383
Small improvement to http client (#1558)
pjsg Oct 27, 2016
9db0778
Remove luaL_buffer from file_g_read() (#1541)
devsaurus Oct 28, 2016
7c3f760
Change HTTP failures from debug to error messages (#1568)
marcelstoer Oct 29, 2016
f0780e3
Add ssd1306_128x32 for U8G (#1571)
devsaurus Oct 29, 2016
cbe967d
Update CONTRIBUTING.md
marcelstoer Nov 2, 2016
77b2e85
Add support to mix ws2812.buffer objects. (#1575)
pjsg Nov 5, 2016
73773fd
Update to the wifi module (#1497)
dnc40085 Nov 6, 2016
b74a9db
Make the MQTT PING functionality work better. (#1557)
pjsg Nov 8, 2016
a0e2e0c
Implement object model for files (#1532)
devsaurus Nov 8, 2016
058777e
Eus channelfix (#1583)
jfollas Nov 8, 2016
fdc766b
fix vfs_lseek() result checking in enduser_setup and clarify SPIFFS_l…
devsaurus Nov 8, 2016
1e955ca
Fix link
marcelstoer Nov 10, 2016
a168449
Overhaul flashing docs once again (#1587)
marcelstoer Nov 12, 2016
7987599
i2c - allow slave stretching SCL (just loop and check) (#1589)
zelll Nov 13, 2016
1d0cf5e
Virtual u8g display driver for RFB/VNC support (#1514)
marcelstoer Nov 14, 2016
9a30797
Add note on dev board usage of SPI bus 0 (#1591)
mdpye Nov 17, 2016
6331e08
Turn SPI busses note to admonition note
marcelstoer Nov 17, 2016
59b9b3e
support for custom websocket headers (#1573)
mrk-its Nov 19, 2016
c70dc74
Handle error condition in file.read() (#1599)
devsaurus Nov 19, 2016
c54bc05
Fix macro as suggested in #1548
marcelstoer Nov 19, 2016
1032e9d
Extract and hoist net receive callbacks
marcelstoer Nov 27, 2016
58321a9
Fix typo at rtctime.md
tae-jun Nov 29, 2016
016f289
Merge pull request #1626 from tae-jun/patch-2
Nov 30, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,22 @@

The following is a set of guidelines for contributing to NodeMCU on GitHub. These are just guidelines, not rules, use your best judgment and feel free to propose changes to this document in a pull request.

It is appreciated but optional if you raise an issue _before_ you start changing NodeMCU, discussing the proposed change; emphasing that the you are proposing to develop the patch yourself, and outlining the strategy for implementation. This type of discussion is what we should be doing on the issues list and it is better to do this before or in parallel to developing the patch rather than having "you should have done it this way" type of feedback on the PR itself.
It is appreciated if you raise an issue _before_ you start changing NodeMCU, discussing the proposed change; emphasing that the you are proposing to develop the patch yourself, and outlining the strategy for implementation. This type of discussion is what we should be doing on the issues list and it is better to do this before or in parallel to developing the patch rather than having "you should have done it this way" type of feedback on the PR itself.

### Table Of Contents

* [General remarks](#general-remarks)
* [Development environment setup](#development-environment-setup)
* [Writing Documentation](#writing-documentation)
* [Working with Git and GitHub](#working-with-git-and-github)
* [General flow](#general-flow)
* [Keeping your fork in sync](#keeping-your-fork-in-sync)
* [Commit messages](#commit-messages)
* [For collaborators](#for-collaborators)
* [Handling releases](#handling-release)

## General remarks
We are a friendly and welcoming community and look forward to your contributions. Once your contribution is integrated into this repository we feel responsible for it. Therefore, be prepared for constructive feedback. Before we merge anything we need to ensure that it fits in and is consistent with the rest of NodeMCU.
If you made something really cool but won't spend time to integrate it into this upstream project please still share it in your fork on GitHub. If you mention it in an issues we'll take a look at it anyway.

## Development environment setup
Use the platform and tools you feel most comfortable with. There are no constraints imposed by this project. You have (at least) two options to set up the toolchain to build the NodeMCU firmware:
Expand Down Expand Up @@ -52,7 +58,7 @@ Avoid intermediate merge commits. [Rebase](https://www.atlassian.com/git/tutoria
1. `git checkout <branch-name>`
1. Make changes to the code base and commit them using e.g. `git commit -a -m 'Look ma, I did it'`
1. When you're done:
1. [Squash your commits](http://www.andrewconnell.com/blog/squash-multiple-git-commits-into-one). There are [several ways](http://stackoverflow.com/a/5201642/131929) of doing this.
1. Think about [squashing (some of) your commits](http://www.andrewconnell.com/blog/squash-multiple-git-commits-into-one). There are [several ways](http://stackoverflow.com/a/5201642/131929) to do this. There's no need to squash everything into a single commit as GitHub offers to do this when we merge your changes. However, you might want to trim your commit history to relevant chunks.
1. Bring your fork up-to-date with the NodeMCU upstream repo ([see below](#keeping-your-fork-in-sync)). Then rebase your branch on `dev` running `git rebase dev`.
1. `git push`
1. [Create a pull request](https://help.github.com/articles/creating-a-pull-request/) (PR) on GitHub.
Expand Down Expand Up @@ -90,3 +96,15 @@ Further paragraphs come after blank lines.
Don't forget to [reference affected issues](https://help.github.com/articles/closing-issues-via-commit-messages/) in the commit message to have them closed automatically on GitHub.

[Amend](https://help.github.com/articles/changing-a-commit-message/) your commit messages if necessary to make sure what the world sees on GitHub is as expressive and meaningful as possible.

## For collaborators

### Handling releases
- Create a [milestone](https://github.com/nodemcu/nodemcu-firmware/milestones) right after you cut a new release. Give it a meaningful name if you already have an idea what the scope of the upcoming release is going to be. Also set the due date to ~2 months in the future.
- Add this milestone to every PR before you merge it. Also add the milestone to PRs you want to see land in this milestone.
- Add notes to the description of the milestone in the course of the ~2 months it lives.
- Be careful and reluctant to merge PRs once we're past the 6-weeks mark of a milestone. Ideally we don't merge anything in the last 2 weeks.
- Cutting a release
- Create an annotated tag like so: `git tag -a <SDK-version>-master_<yyyyMMdd> -m ""`, `git push --tags`
- Create a new [release](https://github.com/nodemcu/nodemcu-firmware/releases) based on the tag you just pushed. The version name is the same as the tag name.
- Write release notes. Mention breaking changes explicitly. Since every PR that went into this release is linked to from the milestone it should be fairly easy to include important changes in the release notes.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -207,14 +207,14 @@ sdk_patched: sdk_extracted $(TOP_DIR)/sdk/.patched-$(SDK_VER)

$(TOP_DIR)/sdk/.extracted-$(SDK_BASE_VER): $(TOP_DIR)/cache/esp_iot_sdk_v$(SDK_FILE_VER).zip
mkdir -p "$(dir $@)"
(cd "$(dir $@)" && rm -fr esp_iot_sdk_v$(SDK_VER) ESP8266_NONOS_SDK && unzip $(TOP_DIR)/cache/esp_iot_sdk_v$(SDK_FILE_VER).zip ESP8266_NONOS_SDK/lib/* ESP8266_NONOS_SDK/ld/eagle.rom.addr.v6.ld ESP8266_NONOS_SDK/include/* )
(cd "$(dir $@)" && rm -fr esp_iot_sdk_v$(SDK_VER) ESP8266_NONOS_SDK && unzip $(TOP_DIR)/cache/esp_iot_sdk_v$(SDK_FILE_VER).zip ESP8266_NONOS_SDK/lib/* ESP8266_NONOS_SDK/ld/eagle.rom.addr.v6.ld ESP8266_NONOS_SDK/include/* ESP8266_NONOS_SDK/bin/esp_init_data_default.bin)
mv $(dir $@)/ESP8266_NONOS_SDK $(dir $@)/esp_iot_sdk_v$(SDK_VER)
rm -f $(SDK_DIR)/lib/liblwip.a
touch $@

$(TOP_DIR)/sdk/.patched-$(SDK_VER): $(TOP_DIR)/cache/esp_iot_sdk_v$(SDK_PATCH_VER).zip
mkdir -p "$(dir $@)/patch"
(cd "$(dir $@)/patch" && unzip $(TOP_DIR)/cache/esp_iot_sdk_v$(SDK_PATCH_VER)*.zip *.a && mv *.a $(SDK_DIR)/lib/)
(cd "$(dir $@)/patch" && unzip $(TOP_DIR)/cache/esp_iot_sdk_v$(SDK_PATCH_VER)*.zip *.a esp_init_data_default.bin && mv *.a $(SDK_DIR)/lib/ && mv esp_init_data_default.bin $(SDK_DIR)/bin/)
rmdir $(dir $@)/patch
rm -f $(SDK_DIR)/lib/liblwip.a
touch $@
Expand Down
7 changes: 7 additions & 0 deletions app/driver/i2c_master.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ LOCAL uint8 pinSCL = 15;
LOCAL void ICACHE_FLASH_ATTR
i2c_master_setDC(uint8 SDA, uint8 SCL)
{
uint8 sclLevel;

SDA &= 0x01;
SCL &= 0x01;
m_nLastSDA = SDA;
Expand All @@ -47,6 +49,11 @@ i2c_master_setDC(uint8 SDA, uint8 SCL)
} else {
I2C_MASTER_SDA_HIGH_SCL_HIGH();
}
if(1 == SCL) {
do {
sclLevel = GPIO_INPUT_GET(GPIO_ID_PIN(I2C_MASTER_SCL_GPIO));
} while(sclLevel == 0);
}
}

/******************************************************************************
Expand Down
16 changes: 11 additions & 5 deletions app/driver/uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@

// For event signalling
static task_handle_t sig = 0;
static uint8 *sig_flag;
static uint8 isr_flag = 0;

// UartDev is defined and initialized in rom code.
extern UartDevice UartDev;
Expand Down Expand Up @@ -277,8 +279,12 @@ uart0_rx_intr_handler(void *para)
got_input = true;
}

if (got_input && sig)
task_post_low (sig, false);
if (got_input && sig) {
if (isr_flag == *sig_flag) {
isr_flag ^= 0x01;
task_post_low (sig, 0x8000 | isr_flag << 14 | false);
}
}
}

static void
Expand Down Expand Up @@ -316,21 +322,21 @@ uart_stop_autobaud()
* Description : user interface for init uart
* Parameters : UartBautRate uart0_br - uart0 bautrate
* UartBautRate uart1_br - uart1 bautrate
* uint8 task_prio - task priority to signal on input
* os_signal_t sig_input - signal to post
* uint8 *flag_input - flag of consumer task
* Returns : NONE
*******************************************************************************/
void ICACHE_FLASH_ATTR
uart_init(UartBautRate uart0_br, UartBautRate uart1_br, os_signal_t sig_input)
uart_init(UartBautRate uart0_br, UartBautRate uart1_br, os_signal_t sig_input, uint8 *flag_input)
{
sig = sig_input;
sig_flag = flag_input;

// rom use 74880 baut_rate, here reinitialize
UartDev.baut_rate = uart0_br;
uart_config(UART0);
UartDev.baut_rate = uart1_br;
uart_config(UART1);
ETS_UART_INTR_ENABLE();
#ifdef BIT_RATE_AUTOBAUD
uart_init_autobaud(0);
#endif
Expand Down
74 changes: 38 additions & 36 deletions app/http/httpclient.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/

#include "osapi.h"
#include "../libc/c_stdio.h"
#include "user_interface.h"
#include "espconn.h"
#include "mem.h"
Expand Down Expand Up @@ -94,7 +95,7 @@ static int ICACHE_FLASH_ATTR http_chunked_decode( const char * chunked, char * d
char * endstr;
/* [chunk-size] */
i = strtoul( str + j, NULL, 16 );
HTTPCLIENT_DEBUG( "Chunk Size:%d\r\n", i );
HTTPCLIENT_DEBUG( "Chunk Size:%d", i );
if ( i <= 0 )
break;
/* [chunk-size-end-ptr] */
Expand Down Expand Up @@ -137,7 +138,7 @@ static void ICACHE_FLASH_ATTR http_receive_callback( void * arg, char * buf, uns
char * new_buffer;
if ( new_size > BUFFER_SIZE_MAX || NULL == (new_buffer = (char *) os_malloc( new_size ) ) )
{
HTTPCLIENT_DEBUG( "Response too long (%d)\n", new_size );
HTTPCLIENT_ERR( "Response too long (%d)", new_size );
req->buffer[0] = '\0'; /* Discard the buffer to avoid using an incomplete response. */
if ( req->secure )
espconn_secure_disconnect( conn );
Expand All @@ -163,12 +164,12 @@ static void ICACHE_FLASH_ATTR http_send_callback( void * arg )

if ( req->post_data == NULL )
{
HTTPCLIENT_DEBUG( "All sent\n" );
HTTPCLIENT_DEBUG( "All sent" );
}
else
{
/* The headers were sent, now send the contents. */
HTTPCLIENT_DEBUG( "Sending request body\n" );
HTTPCLIENT_DEBUG( "Sending request body" );
if ( req->secure )
espconn_secure_send( conn, (uint8_t *) req->post_data, strlen( req->post_data ) );
else
Expand All @@ -181,7 +182,7 @@ static void ICACHE_FLASH_ATTR http_send_callback( void * arg )

static void ICACHE_FLASH_ATTR http_connect_callback( void * arg )
{
HTTPCLIENT_DEBUG( "Connected\n" );
HTTPCLIENT_DEBUG( "Connected" );
struct espconn * conn = (struct espconn *) arg;
request_args_t * req = (request_args_t *) conn->reverse;
espconn_regist_recvcb( conn, http_receive_callback );
Expand Down Expand Up @@ -250,7 +251,7 @@ static void ICACHE_FLASH_ATTR http_connect_callback( void * arg )
}

req->headers = NULL;
HTTPCLIENT_DEBUG( "Sending request header\n" );
HTTPCLIENT_DEBUG( "Sending request header" );
}

static void http_free_req( request_args_t * req)
Expand All @@ -272,7 +273,7 @@ static void http_free_req( request_args_t * req)

static void ICACHE_FLASH_ATTR http_disconnect_callback( void * arg )
{
HTTPCLIENT_DEBUG( "Disconnected\n" );
HTTPCLIENT_DEBUG( "Disconnected" );
struct espconn *conn = (struct espconn *) arg;

if ( conn == NULL )
Expand All @@ -295,7 +296,7 @@ static void ICACHE_FLASH_ATTR http_disconnect_callback( void * arg )

if ( req->buffer == NULL )
{
HTTPCLIENT_DEBUG( "Buffer probably shouldn't be NULL\n" );
HTTPCLIENT_DEBUG( "Buffer probably shouldn't be NULL" );
}
else if ( req->buffer[0] != '\0' )
{
Expand All @@ -305,7 +306,7 @@ static void ICACHE_FLASH_ATTR http_disconnect_callback( void * arg )
if (( os_strncmp( req->buffer, version_1_0, strlen( version_1_0 ) ) != 0 ) &&
( os_strncmp( req->buffer, version_1_1, strlen( version_1_1 ) ) != 0 ))
{
HTTPCLIENT_DEBUG( "Invalid version in %s\n", req->buffer );
HTTPCLIENT_ERR( "Invalid version in %s", req->buffer );
}
else
{
Expand All @@ -326,7 +327,7 @@ static void ICACHE_FLASH_ATTR http_disconnect_callback( void * arg )

char *locationOffsetEnd = (char *) os_strstr(locationOffset, "\r\n");
if ( locationOffsetEnd == NULL ) {
HTTPCLIENT_DEBUG( "Found Location header but was incomplete\n" );
HTTPCLIENT_ERR( "Found Location header but was incomplete" );
http_status = -1;
} else {
*locationOffsetEnd = '\0';
Expand Down Expand Up @@ -371,15 +372,15 @@ static void ICACHE_FLASH_ATTR http_disconnect_callback( void * arg )
return;
}
} else {
HTTPCLIENT_DEBUG("Too many redirections\n");
HTTPCLIENT_ERR("Too many redirections");
http_status = -1;
}
} else {
body = (char *) os_strstr(req->buffer, "\r\n\r\n");

if (NULL == body) {
/* Find missing body */
HTTPCLIENT_DEBUG("Body shouldn't be NULL\n");
HTTPCLIENT_ERR("Body shouldn't be NULL");
/* To avoid NULL body */
body = "";
} else {
Expand Down Expand Up @@ -411,16 +412,9 @@ static void ICACHE_FLASH_ATTR http_disconnect_callback( void * arg )
}


static void ICACHE_FLASH_ATTR http_error_callback( void *arg, sint8 errType )
{
HTTPCLIENT_DEBUG( "Disconnected with error\n" );
http_disconnect_callback( arg );
}


static void ICACHE_FLASH_ATTR http_timeout_callback( void *arg )
{
HTTPCLIENT_DEBUG( "Connection timeout\n" );
HTTPCLIENT_ERR( "Connection timeout" );
struct espconn * conn = (struct espconn *) arg;
if ( conn == NULL )
{
Expand All @@ -439,13 +433,20 @@ static void ICACHE_FLASH_ATTR http_timeout_callback( void *arg )
}


static void ICACHE_FLASH_ATTR http_error_callback( void *arg, sint8 errType )
{
HTTPCLIENT_ERR( "Disconnected with error: %d", errType );
http_timeout_callback( arg );
}


static void ICACHE_FLASH_ATTR http_dns_callback( const char * hostname, ip_addr_t * addr, void * arg )
{
request_args_t * req = (request_args_t *) arg;

if ( addr == NULL )
{
HTTPCLIENT_DEBUG( "DNS failed for %s\n", hostname );
HTTPCLIENT_ERR( "DNS failed for %s", hostname );
if ( req->callback_handle != NULL )
{
req->callback_handle( "", -1, "" );
Expand All @@ -454,7 +455,7 @@ static void ICACHE_FLASH_ATTR http_dns_callback( const char * hostname, ip_addr_
}
else
{
HTTPCLIENT_DEBUG( "DNS found %s " IPSTR "\n", hostname, IP2STR( addr ) );
HTTPCLIENT_DEBUG( "DNS found %s " IPSTR, hostname, IP2STR( addr ) );

struct espconn * conn = (struct espconn *) os_zalloc( sizeof(struct espconn) );
conn->type = ESPCONN_TCP;
Expand Down Expand Up @@ -489,7 +490,7 @@ static void ICACHE_FLASH_ATTR http_dns_callback( const char * hostname, ip_addr_

void ICACHE_FLASH_ATTR http_raw_request( const char * hostname, int port, bool secure, const char * method, const char * path, const char * headers, const char * post_data, http_callback_t callback_handle, int redirect_follow_count )
{
HTTPCLIENT_DEBUG( "DNS request\n" );
HTTPCLIENT_DEBUG( "DNS request" );

request_args_t * req = (request_args_t *) os_zalloc( sizeof(request_args_t) );
req->hostname = esp_strdup( hostname );
Expand All @@ -512,7 +513,7 @@ void ICACHE_FLASH_ATTR http_raw_request( const char * hostname, int port, bool s

if ( error == ESPCONN_INPROGRESS )
{
HTTPCLIENT_DEBUG( "DNS pending\n" );
HTTPCLIENT_DEBUG( "DNS pending" );
}
else if ( error == ESPCONN_OK )
{
Expand All @@ -523,9 +524,9 @@ void ICACHE_FLASH_ATTR http_raw_request( const char * hostname, int port, bool s
{
if ( error == ESPCONN_ARG )
{
HTTPCLIENT_DEBUG( "DNS arg error %s\n", hostname );
HTTPCLIENT_ERR( "DNS arg error %s", hostname );
}else {
HTTPCLIENT_DEBUG( "DNS error code %d\n", error );
HTTPCLIENT_ERR( "DNS error code %d", error );
}
http_dns_callback( hostname, NULL, req ); /* Handle all DNS errors the same way. */
}
Expand Down Expand Up @@ -561,7 +562,7 @@ void ICACHE_FLASH_ATTR http_request( const char * url, const char * method, cons
}
else
{
HTTPCLIENT_DEBUG( "URL is not HTTP or HTTPS %s\n", url );
HTTPCLIENT_ERR( "URL is not HTTP or HTTPS %s", url );
return;
}

Expand All @@ -578,7 +579,7 @@ void ICACHE_FLASH_ATTR http_request( const char * url, const char * method, cons
}

if (path - url >= sizeof(hostname)) {
HTTPCLIENT_DEBUG( "hostname is too long %s\n", url );
HTTPCLIENT_ERR( "hostname is too long %s", url );
return;
}

Expand All @@ -592,7 +593,7 @@ void ICACHE_FLASH_ATTR http_request( const char * url, const char * method, cons
port = atoi( colon + 1 );
if ( port == 0 )
{
HTTPCLIENT_DEBUG( "Port error %s\n", url );
HTTPCLIENT_ERR( "Port error %s", url );
return;
}

Expand All @@ -606,10 +607,10 @@ void ICACHE_FLASH_ATTR http_request( const char * url, const char * method, cons
path = "/";
}

HTTPCLIENT_DEBUG( "hostname=%s\n", hostname );
HTTPCLIENT_DEBUG( "port=%d\n", port );
HTTPCLIENT_DEBUG( "method=%s\n", method );
HTTPCLIENT_DEBUG( "path=%s\n", path );
HTTPCLIENT_DEBUG( "hostname=%s", hostname );
HTTPCLIENT_DEBUG( "port=%d", port );
HTTPCLIENT_DEBUG( "method=%s", method );
HTTPCLIENT_DEBUG( "path=%s", path );
http_raw_request( hostname, port, secure, method, path, headers, post_data, callback_handle, redirect_follow_count);
}

Expand Down Expand Up @@ -645,10 +646,11 @@ void ICACHE_FLASH_ATTR http_put( const char * url, const char * headers, const c

void ICACHE_FLASH_ATTR http_callback_example( char * response, int http_status, char * full_response )
{
os_printf( "http_status=%d\n", http_status );
dbg_printf( "http_status=%d\n", http_status );
if ( http_status != HTTP_STATUS_GENERIC_ERROR )
{
os_printf( "strlen(full_response)=%d\n", strlen( full_response ) );
os_printf( "response=%s<EOF>\n", response );
dbg_printf( "strlen(full_response)=%d\n", strlen( full_response ) );
dbg_printf( "response=%s<EOF>\n", response );
}
}

Loading