diff --git a/src/dap_client_pvt.c b/src/dap_client_pvt.c
index 1899ba31c0efc924215117cd5759e4f443190ba4..0a424ca05f713049509978008bd13efcfc3c5946 100644
--- a/src/dap_client_pvt.c
+++ b/src/dap_client_pvt.c
@@ -58,6 +58,7 @@
 #include "dap_enc_base64.h"
 #include "dap_enc.h"
 #include "dap_common.h"
+#include "dap_strfuncs.h"
 
 #include "dap_http_client_simple.h"
 #include "dap_client.h"
@@ -205,14 +206,19 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt)
         case STAGE_STREAM_CTL: {
             log_it(L_INFO, "Go to stage STREAM_CTL: prepare the request");
 
-            size_t l_request_size = (size_t) snprintf(NULL, 0, "%d", DAP_CLIENT_PROTOCOL_VERSION);
-            char *l_request = DAP_NEW_Z_SIZE(char, l_request_size);
-            snprintf(l_request, l_request_size, "%d", DAP_CLIENT_PROTOCOL_VERSION);
+            char *l_request = dap_strdup_printf("%d", DAP_CLIENT_PROTOCOL_VERSION);
+            size_t l_request_size = dap_strlen(l_request);
             log_it(L_DEBUG, "STREAM_CTL request size %u", strlen(l_request));
 
-            size_t l_suburl_size =1+ (size_t) snprintf(NULL,0,"stream_ctl,channels=%s", a_client_pvt->active_channels);
-            char * l_suburl = DAP_NEW_Z_SIZE(char,l_suburl_size);
-            snprintf( l_suburl, l_suburl_size, "stream_ctl,channels=%s", a_client_pvt->active_channels );
+            char *l_suburl;
+            // connect to vpn server
+            const char l_active_vpn_channels[] = { SERVICE_CHANNEL_ID, 0 };
+            if(!dap_strcmp(a_client_pvt->active_channels,l_active_vpn_channels))
+                l_suburl = dap_strdup_printf("socket_forward");
+            // connect for node sync
+            else
+                l_suburl = dap_strdup_printf("stream_ctl,channels=%s", a_client_pvt->active_channels );
+            //
             dap_client_pvt_request_enc(a_client_pvt,
             DAP_UPLINK_PATH_STREAM_CTL,
                     l_suburl, "type=tcp,maxconn=4" , l_request, l_request_size,
@@ -574,7 +580,8 @@ void dap_client_pvt_request_enc(dap_client_pvt_t * a_client_internal, const char
 void m_request_error(int a_err_code, void * a_obj)
 {
     dap_client_pvt_t * a_client_internal = (dap_client_pvt_t *) a_obj;
-    a_client_internal->request_error_callback(a_client_internal->client, a_err_code);
+    if(a_client_internal && a_client_internal->request_error_callback && a_client_internal->client)
+        a_client_internal->request_error_callback(a_client_internal->client, a_err_code);
 }
 
 /**
@@ -613,7 +620,7 @@ void m_request_response(void * a_response, size_t a_response_size, void * a_obj)
  */
 void m_enc_init_response(dap_client_t * a_client, void * a_response, size_t a_response_size)
 {
-    dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client);
+    dap_client_pvt_t * l_client_pvt = a_client ? DAP_CLIENT_PVT(a_client) : NULL;
     if(!l_client_pvt) {
         log_it(L_ERROR, "m_enc_init_response: l_client_pvt is NULL!");
         return;