/*
** JustLinux Dynamic DNS Protocol
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "prefs.h"
#include "socket.h"
#include "gui.h"
#include "jlp.h"

int jlp_ack(long s);


int jlp_DoItBabe(long mode) {

	long s;
	static char ver[] = "VER 1.0 [justlinux dyndns client v0.1]\n";
	static char opup[] = "OPER update\n";
	static char opoff[] = "OPER delete\n";
	static char done[] = "DONE\n";
	static char ip[] = "IP auto\n";
	char buf[80];

	s = sock_Connect((char *)prf_Get(PRFA_SERVER),(int)prf_Get(PRFA_PORT));
	if (s == -1) {
		gui_Say("Cannot connect!\n");
		return(1);
	}

	sock_Check(s,SOCK_SEND);
	sock_Send(s,ver,39);
	if (jlp_ack(s) == -1) return(-1);

	sock_Check(s,SOCK_SEND);
	sprintf(buf,"USER %s\n",(char *)prf_Get(PRFA_USER));
	sock_Send(s,buf,6+strlen((char *)prf_Get(PRFA_USER)));
	if (jlp_ack(s) == -1) return(-1);

	sock_Check(s,SOCK_SEND);
	sprintf(buf,"PASS %s\n",(char *)prf_Get(PRFA_PASS));
	sock_Send(s,buf,6+strlen((char *)prf_Get(PRFA_PASS)));
	if (jlp_ack(s) == -1) return(-1);

	sock_Check(s,SOCK_SEND);
	sprintf(buf,"HOST %s\n",(char *)prf_Get(PRFA_HOST));
	sock_Send(s,buf,6+strlen((char *)prf_Get(PRFA_HOST)));
	if (jlp_ack(s) == -1) return(-1);

	if (mode == MODE_UP) {
		sock_Check(s,SOCK_SEND);
		sock_Send(s,opup,12);
		if (jlp_ack(s) == -1) return(-1);
		sock_Check(s,SOCK_SEND);
		sock_Send(s,ip,8);
		if (jlp_ack(s) == -1) return(-1);
	} else {
		sock_Check(s,SOCK_SEND);
		sock_Send(s,opoff,12);
		if (jlp_ack(s) == -1) return(-1);
	}

	sock_Check(s,SOCK_SEND);
	sock_Send(s,done,5);
	if (jlp_ack(s) == -1) return(-1);

	sock_Close(s);

	if (mode == MODE_UP)
		gui_Say("IP updated.\n");
	else
		gui_Say("IP deleted.\n");
	return(0);

}


int jlp_ack(long s) {

	char buf[100];
	int i=0;
	long devam=0;

	while(devam==0) {
		if (sock_Recv(s,&buf[i],1) == -1) {
			gui_Say("Socket error!");
			return(-1);
		}
		if (buf[i]=='\n') devam=1;
		i++;
	}
	buf[i] = 0;

	if (strncmp(buf,"OK",2)!=0) {
		gui_Say(buf);
		return(-1);
	}

	return(0);

}
