diff --git a/libmobile_hilink.c b/libmobile_hilink.c
index 93d797d3884abe2cae53c7452de274856c5bf3ff..285ef52fd9750aee69fe110edbdc1a961953cefb 100644
--- a/libmobile_hilink.c
+++ b/libmobile_hilink.c
@@ -7,6 +7,63 @@
 
 #include "libmobile_hilink.h"
 
+void xml_to_json(xmlNode *anode, json_object *jobj)
+{
+	xmlNodePtr cur_node = NULL;
+	json_object *cur_jstr = NULL;
+
+	for (cur_node = anode; cur_node; cur_node = cur_node->next)
+	{
+		////debug_print("child address: %p\n", cur_node);
+		////debug_print("next addres: %p\n", cur_node->next);
+		////debug_print("root child content: %s\n", (uint8_t *)xmlNodeGetContent(cur_node));
+
+		if (cur_node->type == XML_ELEMENT_NODE)
+		{
+			if (xmlChildElementCount(cur_node) == 0)
+			{
+				cur_jstr = json_object_new_string((char *)xmlNodeGetContent(cur_node));
+				//debug_print("xmlNodeGet name: %s\n", (char *)cur_node->name);
+				json_object_object_add(jobj, (char *)cur_node->name, cur_jstr);
+			}
+		}
+
+		xml_to_json(cur_node->children, jobj);
+	}
+}
+
+//free memory...
+struct json_object *xml_to_json_converter(struct string *result)
+{
+	json_object *jobj;
+	xmlDocPtr doc_ptr = NULL;
+	xmlNode *origin_node = NULL;
+
+	doc_ptr = xmlParseMemory(result->ptr, result->len);
+	if (!doc_ptr)
+		goto fail_doc_ptr;
+	//debug_print("data from xml: %s\n", result->ptr);
+
+	origin_node = xmlDocGetRootElement(doc_ptr);
+	if (!origin_node)
+		goto fail_origin_node;
+
+	jobj = json_object_new_object();
+	xml_to_json(origin_node, jobj);
+
+	//debug_print("Json object from xml: %s\n", json_object_to_json_string(jobj));
+
+	if (doc_ptr)
+		xmlFreeDoc(doc_ptr);
+
+	return jobj;
+
+fail_origin_node:
+	if (doc_ptr)
+		xmlFreeDoc(doc_ptr);
+fail_doc_ptr:
+	return NULL;
+}
 
 //global varibales
 char *home_url = "http://192.168.8.1/html/index.html";
@@ -42,37 +99,37 @@ leave_token:
 	return NULL;
 }
 
-
+/*
 static size_t write_response(void *ptr, size_t size, size_t nmemb, void *stream)
 {
 	size_t total_size = size * nmemb;
 
-	struct write_result *result = (struct write_result *)stream;
+	struct string *result = (struct string *)stream;
 
-	if (result->pos + total_size >= BUFFER_SIZE - 1) {
+	if (result->len + total_size >= BUFFER_SIZE - 1) {
 		fprintf(stderr, "error: too small buffer\n");
 		return 0;
 	}
 
-	memcpy(result->data + result->pos, ptr, total_size);
-	result->pos += total_size;
+	memcpy(result->ptr + result->len, ptr, total_size);
+	result->len += total_size;
 
 	return total_size;
 }
+*/
 
 
-
-struct write_result *memalloc_write_result(void)
+struct string *memalloc_write_result(void)
 {
-	struct write_result *wr = (struct write_result *) calloc(1, sizeof(*wr));
+	struct string *wr = (struct string *) calloc(1, sizeof(*wr));
 	if (!wr)
 		goto leave;
 
-	wr->data = calloc(BUFFER_SIZE, sizeof(wr->data));
-	if (!wr->data)
+	wr->ptr = calloc(BUFFER_SIZE, sizeof(wr->ptr));
+	if (!wr->ptr)
 		goto leave;
 
-	wr->pos = 0;
+	wr->len = 0;
 
 	return wr;
 
@@ -80,14 +137,14 @@ leave:
 	if (wr)
 		free(wr);
 
-	if (wr->data)
-		free(wr->data);
+	if (wr->ptr)
+		free(wr->ptr);
 
 	return NULL;
 }
 
 
-void free_write_result(struct write_result *result)
+void free_write_result(struct string *result)
 {
 	if (result) {
 		free(result);
@@ -117,21 +174,21 @@ int check_cookie_status(CURLcode status, CURL *curl)
 }
 
 
-void prepare_curl_write_callback(CURL *curl, const char *url, struct write_result *result)
+void prepare_curl_write_callback(CURL *curl, const char *url, struct string *result)
 {
 	curl_easy_setopt(curl, CURLOPT_URL, url);
 	curl_easy_setopt(curl, CURLOPT_WRITEDATA, result);
-	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_response);
+	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_func);
 }
 
 
 
 //free mem
-static struct write_result *get_request(const char *url, const char *api_url)
+static struct string *get_request(const char *url, const char *api_url)
 {
 	CURL *curl = NULL;
 	CURLcode status;
-	struct write_result *result;
+	struct string *result;
 
 	curl = curl_easy_init();
 	if (!curl)
@@ -150,8 +207,8 @@ static struct write_result *get_request(const char *url, const char *api_url)
 		goto leave;
 
 	//Prepare result struct to get next http response.
-	memset(result->data, 0, BUFFER_SIZE);
-	result->pos = 0;
+	memset(result->ptr, 0, BUFFER_SIZE);
+	result->len = 0;
 
 	prepare_curl_write_callback(curl, api_url, result);
 	curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt"); //Read locally stored cookies
@@ -161,9 +218,9 @@ static struct write_result *get_request(const char *url, const char *api_url)
 		goto leave;
 
 
-	result->data[result->pos] = '\0';
+	result->ptr[result->len] = '\0';
 	if (DEBUG_RESULT)
-		printf("Http get request data is: %s\n", result->data);
+		printf("Http get request data is: %s\n", result->ptr);
 
 	curl_easy_cleanup(curl);
 
@@ -182,14 +239,14 @@ leave:
 
 
 //free mem
-static struct write_result *post_request(const char *url, const char *api_url, char *post_query)
+static struct string *post_request(const char *url, const char *api_url, char *post_query)
 {
 	char token[1024] = {0};
 	char session[1024] = {0};
 	char *token_text = "__RequestVerificationToken:";
 	char *session_text = "Cookie:SessionID=";
 	struct curl_slist *headers = NULL;
-	struct write_result *result;
+	struct string *result;
 	CURL *curl = NULL;
 	CURLcode status;
 
@@ -207,20 +264,20 @@ static struct write_result *post_request(const char *url, const char *api_url, c
 	if (check_cookie_status(status, curl))
 		goto leave;
 
-	result->data[result->pos] = '\0';
+	result->ptr[result->len] = '\0';
 
 
-	char *session_id = parser(result->data, "SessionID=");
+	char *session_id = parser(result->ptr, "SessionID=");
 	if (DEBUG)
 		printf("Session id is: %s\n", session_id);
-	char *token_id = parser(result->data, "<TokInfo>");
+	char *token_id = parser(result->ptr, "<TokInfo>");
 	if (DEBUG)
 		printf("Token is: %s\n", token_id);
 
 
 	//clean the memory to prepare write operation for next http response..
-	memset(result->data, 0, BUFFER_SIZE);
-	result->pos = 0;
+	memset(result->ptr, 0, BUFFER_SIZE);
+	result->len = 0;
 
 	//prepare http header with token & session.
 	sprintf(token, "%s%s", token_text, token_id);
@@ -240,9 +297,9 @@ static struct write_result *post_request(const char *url, const char *api_url, c
 
 	curl_easy_cleanup(curl);
 
-	result->data[result->pos] = '\0';
+	result->ptr[result->len] = '\0';
 	if (DEBUG_RESULT)
-		printf("http post request data is: %s\n", result->data);
+		printf("http post request data is: %s\n", result->ptr);
 
 	//free the parser memeory..
 	if (token_id)
@@ -284,14 +341,14 @@ leave:
 struct json_object *mobile_get_device_signal_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/device/signal";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -310,14 +367,14 @@ fail_result:
 struct json_object *mobile_get_device_info_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/device/information";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -337,14 +394,14 @@ fail_result:
 struct json_object *mobile_get_monitoring_status_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/monitoring/status";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -364,14 +421,14 @@ fail_result:
 struct json_object *mobile_get_trafficstatistics_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/monitoring/traffic-statistics";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -391,14 +448,14 @@ fail_result:
 struct json_object *mobile_get_provider_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/net/current-plmn";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -418,14 +475,14 @@ fail_result:
 struct json_object *mobile_get_pin_status_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/pin/status";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -445,14 +502,14 @@ fail_result:
 struct json_object *mobile_get_connection_status_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/dialup/connection";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -472,14 +529,14 @@ fail_result:
 struct json_object *mobile_get_apn_profiles_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/dialup/profiles";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -499,14 +556,14 @@ fail_result:
 struct json_object *mobile_get_notification_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/monitoring/check-notifications";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -526,14 +583,14 @@ fail_result:
 struct json_object *mobile_get_sms_count_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/sms/sms-count";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -553,14 +610,14 @@ fail_result:
 struct json_object *mobile_get_language_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/language/current-language";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = get_request(home_url, api_url);
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
 	if(!result_json)
 		goto fail_converter;
@@ -581,7 +638,7 @@ struct json_object *mobile_create_apn_profile_hilink(char *name, char *apn_name,
 {
 	char *api_url = "http://192.168.8.1/api/dialup/profiles";
 	char post_query[1024];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 1023, "<request><Delete>0</Delete><SetDefault>0</SetDefault><Modify>1</Modify><Profile><Index></Index><IsValid>1</IsValid><Name>%s</Name><ApnIsStatic>1</ApnIsStatic><ApnName>%s</ApnName><DialupNum>*99#</DialupNum><Username>%s</Username><Password>%s</Password><AuthMode>0</AuthMode><IpIsStatic></IpIsStatic><IpAddress></IpAddress><DnsIsStatic></DnsIsStatic><PrimaryDns></PrimaryDns><SecondaryDns></SecondaryDns><ReadOnly>0</ReadOnly><iptype>2</iptype></Profile></request>", name, apn_name, username, password);
@@ -610,7 +667,7 @@ struct json_object *mobile_set_apn_profile_hilink(char *name, char *apn_name, ch
 {
 	char *api_url = "http://192.168.8.1/api/dialup/profiles";
 	char post_query[1024];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 1023, "<request><Delete>0</Delete><SetDefault>3</SetDefault><Modify>2</Modify><Profile><Index>3</Index><IsValid>1</IsValid><Name>%s</Name><ApnIsStatic>1</ApnIsStatic><ApnName>%s</ApnName><DialupNum>*99#</DialupNum><Username>%s</Username><Password>%s</Password><AuthMode>0</AuthMode><IpIsStatic>0</IpIsStatic><IpAddress></IpAddress><DnsIsStatic>0</DnsIsStatic><PrimaryDns></PrimaryDns><SecondaryDns></SecondaryDns><ReadOnly>0</ReadOnly><iptype>0</iptype></Profile></request>", name, apn_name, username, password);
@@ -634,12 +691,11 @@ fail_result:
 	return NULL;
 }
 
-
 struct json_object *mobile_delete_apn_profile_hilink(int profile_name_location)
 {
 	char *api_url = "http://192.168.8.1/api/dialup/profiles";
 	char post_query[512];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 512, "<request><Delete>%d</Delete><SetDefault>1</SetDefault><Modify>0</Modify></request>", profile_name_location);
@@ -668,7 +724,7 @@ struct json_object *mobile_sms_read_hilink(int sms_location)
 {
 	char *api_url = "http://192.168.8.1/api/sms/set-read";
 	char post_query[256];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 256, "<request><Index>%d</Index></request>", sms_location);
@@ -697,7 +753,7 @@ struct json_object *mobile_sms_delete_hilink(int sms_location)
 {
 	char *api_url = "http://192.168.8.1/api/sms/delete-sms";
 	char post_query[256];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 256, "<request><Index>%d</Index></request>", sms_location);
@@ -726,7 +782,7 @@ struct json_object *mobile_reset_traffic_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/monitoring/clear-traffic";
 	char *post_query = "<request><ClearTraffic>1</ClearTraffic></request>";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = post_request(sess_tok_url, api_url, post_query);
@@ -753,7 +809,7 @@ struct json_object *mobile_LTE_register_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/net/register";
 	char *post_query = "<request><Mode>0</Mode><Plmn></Plmn><Rat></Rat></request>";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = post_request(sess_tok_url, api_url, post_query);
@@ -780,7 +836,7 @@ struct json_object *mobile_LTE_enable_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/net/net-mode";
 	char *post_query = "<request><NetworkMode>00</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>7FFFFFFFFFFFFFFF</LTEBand></request>";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = post_request(sess_tok_url, api_url, post_query);
@@ -807,7 +863,7 @@ struct json_object *mobile_LTE_disable_hilink()
 {
 	char *api_url = "http://192.168.8.1/api/net/net-mode";
 	char *post_query = "<NetworkMode>0201</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>7FFFFFFFFFFFFFFF</LTEBand></request>";
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	result = post_request(sess_tok_url, api_url, post_query);
@@ -835,7 +891,7 @@ struct json_object *mobile_set_connection_type_hilink(int connection_type)
 {
 	char *api_url = "http://192.168.8.1/api/dialup/connection";
 	char post_query[256];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 256, "<request><NetworkMode>%d</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>7FFFFFFFFFFFFFFF</LTEBand></request>", connection_type);
@@ -864,7 +920,7 @@ struct json_object *data_roaming(int action)
 {
 	char *api_url = "http://192.168.8.1/api/dialup/connection";
 	char post_query[256];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 256, "<request><RoamAutoConnectEnable>%d</RoamAutoConnectEnable><MaxIdelTime>600</MaxIdelTime><ConnectMode>0</ConnectMode><MTU>1500</MTU><auto_dial_switch>1</auto_dial_switch><pdp_always_on>0</pdp_always_on></request>", action);
@@ -905,10 +961,10 @@ struct json_object *pin_action(char *type, char *current_pin, char *new_pin, cha
 {
 	char *api_url = "http://192.168.8.1/api/pin/operate";
 	char post_query[256];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
-	sprintf(post_query, 256, "<request><OperateType>%s</OperateType><CurrentPin>%s</CurrentPin><NewPin>%s</NewPin><PukCode>%s</PukCode></request>", type, current_pin, new_pin, puk);
+	snprintf(post_query, 256, "<request><OperateType>%s</OperateType><CurrentPin>%s</CurrentPin><NewPin>%s</NewPin><PukCode>%s</PukCode></request>", type, current_pin, new_pin, puk);
 
 	result = post_request(sess_tok_url, api_url, post_query);
 	if (!result)
@@ -947,13 +1003,17 @@ struct json_object *mobile_set_pin_hilink(char *current_pin, char *new_pin)
 	return pin_action("03", current_pin, new_pin, "");
 }
 
+struct json_object *mobile_unlock_sim_hilink(char *pin, char *puk)
+{
+	return pin_action("4", pin, pin, puk);
+}
 
 struct json_object *mobile_set_language_hilink(char *language_name)
 {
 	char *api_url = "http://192.168.8.1/api/language/current-language";
 	char post_query[128];
-	struct write_result *result;
-	struct json_object *result_json;
+	struct string *result;
+	struct json_object *result_json = NULL;
 
 	snprintf(post_query, 128, "<request><CurrentLanguage>%s</CurrentLanguage></request>", language_name);
 
@@ -961,27 +1021,19 @@ struct json_object *mobile_set_language_hilink(char *language_name)
 	if (!result)
 		goto fail_result;
 
-	debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
+	//debug_print("Json object inside library: %s\n", json_object_to_json_string(xml_to_json_converter(result)));
 	result_json = xml_to_json_converter(result);
-	if(!result_json)
-		goto fail_converter;
 
-	if (result)
-		free(result);
-
-	return result_json;
-
-fail_converter:
 	free(result);
 fail_result:
-	return NULL;
+	return result_json;
 }
 
 struct json_object *network_action(int action)
 {
 	char *api_url = "http://192.168.8.1/api/dialup/dial";
 	char post_query[128];
-	struct write_result *result;
+	struct string *result;
 	struct json_object *result_json;
 
 	snprintf(post_query, 128, "<request><Action>%d</Action></request>", action);
diff --git a/libmobile_hilink.h b/libmobile_hilink.h
index 8e77d4e142e1cb3ea433b2ed8cb5bb22cce9345b..06e0e071f67582a3771d9b2bad653a3623853772 100644
--- a/libmobile_hilink.h
+++ b/libmobile_hilink.h
@@ -7,23 +7,25 @@
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include "common.h"
+#include <json-c/json.h>
+#include <libxml2/libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
 
+#include "lib_commons.h"
 
 #define BUFFER_SIZE  (256 * 1024)   //256kb
-//#define TAG_CONTENT_SIZE   100
+#define TAG_CONTENT_SIZE   100
 #define DEBUG 1
 #define DEBUG_RESULT 0
 #define ENABLE 1
 #define DISABLE 0
 
 
-/*
-struct write_result {
-	char *data;
-	int pos;
-};
-*/
+
+
+char *xml_parser(struct string *result, char *tag);
+struct json_object *xml_to_json_converter(struct string *result);
 
 
 //pci, sc, cell_id, rsrq, rsrp, rssi, sinr, rscp, ecio, mode..
@@ -70,6 +72,8 @@ struct json_object *mobile_create_apn_profile_hilink(char *name, char *apn_name,
 
 struct json_object *mobile_set_apn_profile_hilink(char *name, char *apn_name, char *username, char *password);
 
+struct json_object *mobile_unlock_sim_hilink(char *pin, char *puk);
+
 struct json_object *mobile_delete_apn_profile_hilink(int profile_name_location);
 
 struct json_object *mobile_sms_read_hilink(int sms_location);