Exemplo n.º 1
0
int ICACHE_FLASH_ATTR http_relay_api_toggle(http_connection *c) {


	NODE_DBG("http_wifi_api_get_status");	
	

	//wait for whole body
	if(c->state <HTTPD_STATE_BODY_END)
		return HTTPD_CGI_MORE; 

	
	int ret = json_count_token(c->body.data,c->body.len);
	
	jsonPair fields[1]={
		{
			.key="relay",
			.value=NULL
		}
	};

	if(json_parse(&fields[0],1,c->body.data,c->body.len)){
		
		int relayNumber = atoi(fields[0].value);	

		if(relayNumber<0 || relayNumber >=relay_count()){
			http_response_BAD_REQUEST(c);
			NODE_DBG("Wrong relay");		
			return HTTPD_CGI_DONE;
		}

		unsigned status = relay_get_state(relayNumber);
		status = relay_toggle_state(relayNumber);

		//write headers
		http_SET_HEADER(c,HTTP_CONTENT_TYPE,JSON_CONTENT_TYPE);	
		http_response_OK(c);

		write_json_object_start(c);
		write_json_pair_int(c,"relay",relayNumber);
		write_json_list_separator(c);
		write_json_pair_int(c,"state",status);
		write_json_object_end(c);

		return HTTPD_CGI_DONE;

	}
	else{
		http_response_BAD_REQUEST(c);		
		return HTTPD_CGI_DONE;
	}

	http_response_BAD_REQUEST(c);		
	return HTTPD_CGI_DONE;


}
Exemplo n.º 2
0
int ICACHE_FLASH_ATTR http_relay_api_toggle(http_connection *c) {


	NODE_DBG("http_wifi_api_get_status");	
	

	//wait for whole body
	if(c->state <HTTPD_STATE_BODY_END)
		return HTTPD_CGI_MORE; 

	//parse json
	cJSON * root = cJSON_Parse(c->body.data);
	if(root==NULL) goto badrequest;
	
	cJSON * relay = cJSON_GetObjectItem(root,"relay");
	if(relay==NULL) goto badrequest;


	int relayNumber = relay->valueint;
	cJSON_Delete(root);	

	if(relayNumber<0 || relayNumber >=relay_count()){
		http_response_BAD_REQUEST(c);
		NODE_DBG("Wrong relay");		
		return HTTPD_CGI_DONE;
	}
	else{
		//valid relay

		unsigned status = relay_get_state(relayNumber);
		status = relay_toggle_state(relayNumber);

		//write headers
		http_SET_HEADER(c,HTTP_CONTENT_TYPE,JSON_CONTENT_TYPE);	
		http_response_OK(c);


		//create json
		root = cJSON_CreateObject();
		cJSON_AddNumberToObject(root,"relay",relayNumber);
		cJSON_AddNumberToObject(root,"state",status);

		http_write_json(c,root);

		//delete json struct
		cJSON_Delete(root);

		return HTTPD_CGI_DONE;

	}	

badrequest:
	http_response_BAD_REQUEST(c);
	return HTTPD_CGI_DONE;

}