747 lines
20 KiB
C
Executable File
747 lines
20 KiB
C
Executable File
#include "tnn.h"
|
|
|
|
#ifdef L1IPCONV
|
|
|
|
/* Zeiger auf das Aktuelle Interface. */
|
|
static T_INTERFACE *ifpp;
|
|
|
|
/* Anzahl der aktuellen IP-CONVERS-Routen auf 0 setzen. */
|
|
int ip_tbl_top = 0;
|
|
|
|
|
|
#ifdef OS_IPLINK
|
|
/******************************************************************************/
|
|
/* */
|
|
/* IPC-Routen ausgeben. */
|
|
/* */
|
|
/******************************************************************************/
|
|
static void ShowIpcEntry(struct iptbl iPC, MBHEAD *buf)
|
|
{
|
|
char TmpCall[10];
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(ShowIpcEntry)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
buf->l4time = buf->mbpc; /* erst mal merken, wo wir sind */
|
|
|
|
call2str(TmpCall, iPC.name); /* Konvertiere Rufzeichen. */
|
|
putprintf(buf, "%s", TmpCall);
|
|
|
|
putspa(10, buf);
|
|
show_ip_addr(Ntohl(iPC.ipaddr), buf); /* IP-Adresse ausgeben. */
|
|
|
|
putspa(27, buf);
|
|
putnum(iPC.port, buf); /* TCP-Port ausgeben. */
|
|
|
|
putspa(33, buf);
|
|
putprintf(buf, "%s\r", (iPC.linkflag ? "LINK" : "USER")); /* Status ausgeben*/
|
|
}
|
|
#endif /* OS_IPLINK */
|
|
|
|
/* IP-CONVERS-Server Einstellung aendern/setzen. */
|
|
void ccpipconv(void)
|
|
{
|
|
MBHEAD *mbp;
|
|
#ifdef OS_IPLINK
|
|
struct hostent *he;
|
|
UBYTE tip[4];
|
|
unsigned char tmpip[IPADDR + 1];
|
|
unsigned char tmphost[HNLEN];
|
|
unsigned int tmptport;
|
|
register int i;
|
|
char tmpcall[L2IDLEN];
|
|
BOOLEAN tmplink = FALSE;
|
|
#endif /* OS_IPLINK */
|
|
char ch;
|
|
int tmp_fd = EOF;
|
|
int newloglevel = 0;
|
|
unsigned int new_tcp_port = 0;
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(ccpipconv)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
ifpp = &ifp[CVS_ID]; /* Zeiger auf das IPCONV-Interface. */
|
|
|
|
/* Sysop will aendern? */
|
|
if (issyso() && skipsp(&clicnt, &clipoi))
|
|
{
|
|
clicnt--;
|
|
ch = toupper(*clipoi++);
|
|
switch (ch)
|
|
{
|
|
/* Sysop will IPCONV-Port aendern */
|
|
case 'P':
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
{
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
/* Neuen TCP Port einlesen. */
|
|
new_tcp_port = nxtlong(&clicnt, &clipoi);
|
|
|
|
if ( (new_tcp_port <= 0)
|
|
||(new_tcp_port > 65535))
|
|
{
|
|
#ifdef SPEECH
|
|
putmsg(speech_message(328));
|
|
#else
|
|
putmsg("IPCONV-Port not valid, not changed !!!\r");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
/* Wenn NEUER TCP-Port und ALTER TCP-Port */
|
|
/* GLEICH sind, brauchen wir nix aendern. */
|
|
if (ifpp->tcpport == Htons((unsigned short)new_tcp_port))
|
|
{
|
|
putmsg("TCP-Port successfully changed\r");
|
|
return;
|
|
}
|
|
|
|
/* Ist IPCONV-Server aktiv ? */
|
|
if (ifpp->actively == FALSE)
|
|
{
|
|
#ifdef SPEECH
|
|
putmsg(speech_message(327));
|
|
#else
|
|
putmsg("TCP-Port haven not switched on!\r");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
if ((tmp_fd = SetupTCP(ifpp->name, (unsigned short)new_tcp_port)) != EOF)
|
|
{
|
|
#ifdef OS_STACK
|
|
int tmp_fd_OS;
|
|
|
|
if ((tmp_fd_OS = SetupOS(ifpp, (unsigned short)new_tcp_port)) != EOF)
|
|
{
|
|
/* alten Socket schliessen */
|
|
close(ifpp->OsSock);
|
|
/* Neuen Socket merken */
|
|
ifpp->OsSock = tmp_fd_OS;
|
|
}
|
|
else
|
|
{
|
|
Close(tmp_fd);
|
|
putmsg("ERROR: Changing UDP-Port failed, Port not changed !!!\r");
|
|
return;
|
|
}
|
|
#endif /* OS_STACK */
|
|
|
|
Close(ifpp->ISock); /* Alten Socket schliessen. */
|
|
ifpp->ISock = tmp_fd ; /* Neuen Socket merken */
|
|
}
|
|
else
|
|
{ /* Neuen TCP-Port liess sich nicht Initialisieren. */
|
|
putmsg("ERROR: Changing UDP-Port failed, Port not changed !!!\r");
|
|
return;
|
|
}
|
|
|
|
/* TCP-Port OK, dann markieren wir neuen TCP-Port. */
|
|
ifpp->tcpport = Htons((unsigned short)new_tcp_port);
|
|
|
|
#ifdef SPEECH
|
|
putmsg(speech_message(330));
|
|
#else
|
|
putmsg("TCP-Port successfully changed\r");
|
|
#endif
|
|
return;
|
|
|
|
/* Sysop will LOGLevel aendern */
|
|
case 'L':
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
{
|
|
/* Keine Parameter angegeben, */
|
|
/* status Loglevel anzeigen. */
|
|
mbp = putals("IPCONVER-Server:\r");
|
|
#ifdef SPEECH
|
|
putprintf(mbp, speech_message(299),ifpp->log);
|
|
#else
|
|
putprintf(mbp, "My LogLevel: %d\r",ifpp->log);
|
|
#endif
|
|
prompt(mbp);
|
|
seteom(mbp);
|
|
return;
|
|
}
|
|
|
|
/* Markiere neuen Loglevel */
|
|
newloglevel = nxtnum(&clicnt, &clipoi);
|
|
|
|
if ( (newloglevel < 0)
|
|
||(newloglevel > 3))
|
|
{
|
|
mbp = putals("IPCONVERS-Server:\r");
|
|
#ifdef SPEECH
|
|
putprintf(mbp, speech_message(325));
|
|
#else
|
|
putprintf(mbp, "Fehler: Loglevel werte von 0 bis 3!\r");
|
|
#endif
|
|
prompt(mbp);
|
|
seteom(mbp);
|
|
return;
|
|
}
|
|
|
|
/* Neuen Loglevel Sysop setzen. */
|
|
ifpp->log = newloglevel;
|
|
|
|
mbp = putals("IPCONVERS-Server:\r");
|
|
#ifdef SPEECH
|
|
putprintf(mbp, speech_message(299), ifpp->log);
|
|
#else
|
|
putprintf(mbp, "My Loglevel: %d\r", ifpp->log);
|
|
#endif
|
|
prompt(mbp);
|
|
seteom(mbp);
|
|
return;
|
|
break;
|
|
|
|
#ifdef OS_IPLINK
|
|
/* Route eintragen/loeschen. */
|
|
case 'R':
|
|
/* Steht noch was im Buffer? */
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
{
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
/* Leerzeile loeschen. */
|
|
clicnt--;
|
|
switch (*clipoi++)
|
|
{
|
|
/* Route loeschen? */
|
|
case '-':
|
|
/* Steht noch was im Buffer? */
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
{
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
/* IPConver-Route loeschen. */
|
|
IPConvDelTBL(clipoi);
|
|
break;
|
|
|
|
/* Neue Route eintragen. */
|
|
case '+':
|
|
/* Steht noch was im Buffer? */
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
{
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
/* Call lesen */
|
|
if (getcal(&clicnt, &clipoi, TRUE, (char *)tmpcall) != YES)
|
|
{
|
|
invcal();
|
|
return;
|
|
}
|
|
|
|
/* Steht noch was im Buffer? */
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
{
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
/* Hostname/IP-Adresse einlesen. */
|
|
for (i = 0; i < HNLEN; ++i)
|
|
{
|
|
/* Keine Zeichen oder leerzeichen? */
|
|
if (!clicnt || *clipoi == ' ')
|
|
/* Schleife abbrechen. */
|
|
break;
|
|
|
|
clicnt--;
|
|
/* Aktuelles zeichen in TBL schreiben. */
|
|
tmphost[i] = *clipoi++;
|
|
}
|
|
tmphost[i] = NUL;
|
|
/* Hostname oder IP-Adresse pruefen. */
|
|
he = gethostbyname((char *)tmphost);
|
|
|
|
/* IP-Adresse OK? */
|
|
if (he == NULL)
|
|
{
|
|
/* Hostname nicht bekannt oder */
|
|
/* IP-Adresse ungueltig. */
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
(void)memcpy(tip, he->h_addr_list[0], 4);
|
|
/* Kopiere IP-Adresse in TBL. */
|
|
sprintf((char *)tmpip, "%d.%d.%d.%d"
|
|
,tip[0]
|
|
,tip[1]
|
|
,tip[2]
|
|
,tip[3]);
|
|
|
|
/* Steht noch was im Buffer? */
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
{
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
/* TCP-Port einlesen. */
|
|
tmptport = nxtlong(&clicnt, &clipoi);
|
|
|
|
/* Pruefen ob der TCP-Port gueltig ist. */
|
|
if ( tmptport <= 0
|
|
||tmptport > 65535)
|
|
{
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
|
|
/* Steht noch was im Buffer? */
|
|
if (!skipsp(&clicnt, &clipoi))
|
|
tmplink = FALSE;
|
|
else
|
|
if (!strncasecmp(clipoi, "LINK", clicnt))
|
|
tmplink = TRUE;
|
|
else
|
|
tmplink = FALSE;
|
|
/* Neue IPC-Route hinzufuegen. */
|
|
IPConvAddTBL(tmpcall, /* Rufzeichen. */
|
|
tmphost, /* Hostname/IP-Adresse. */
|
|
he, /* IP-Adresse. */
|
|
(unsigned short)tmptport, /* TCP-Port. */
|
|
tmplink); /* Status: USER/LINK-Modus. */
|
|
}
|
|
break;
|
|
#endif /* OS_IPLINK */
|
|
|
|
default:
|
|
putmsg("Invalid Parameter\r");
|
|
return;
|
|
}
|
|
}
|
|
mbp = putals("IPCONVERS-Server");
|
|
putprintf(mbp,":(%d/%d):\r", ip_tbl_top, MAX_ROUTEN);
|
|
|
|
#ifdef OS_IPLINK
|
|
putstr("Name------IP---------------Port--Status-\r", mbp);
|
|
|
|
for (i = 0; i < ip_tbl_top; ++i)
|
|
ShowIpcEntry(ip_tbl[i], mbp);
|
|
|
|
putstr("\r", mbp);
|
|
#endif /* OS_IPLINK */
|
|
#ifdef SPEECH
|
|
putprintf(mbp, speech_message(299), ifpp->log);
|
|
putprintf(mbp, speech_message(326), Ntohs(ifpp->tcpport));
|
|
#else
|
|
putprintf(mbp, "My Loglevel: %u\r", ifpp->log);
|
|
putprintf(mbp, "My TCP-Port: %u\r", Ntohs(ifpp->tcpport));
|
|
#endif
|
|
prompt(mbp);
|
|
seteom(mbp);
|
|
}
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* Im Convers anmelden. */
|
|
/* */
|
|
/******************************************************************************/
|
|
void IPConvLogin(void)
|
|
{
|
|
PTCENT *ptcp;
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvLogin)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
cpyid(usrcal, tcppoi->Upcall); /* Usercall setzen fuer CVS. */
|
|
|
|
clipoi = tcppoi->cmd; /* ggf. Channel setzen. */
|
|
clicnt = tcppoi->cmdlen; /* laenge setzen. */
|
|
|
|
ptcp = ptctab + g_uid(tcppoi, TCP_USER);/* User aus der patchcord ermitteln.*/
|
|
ptcp->state = C_IPLINK; /* Option fuer USER-Ausgabe setzen. */
|
|
|
|
userpo = ptcp->ublk; /* Userblock-Zeiger lesen. */
|
|
userpo->convflag = 1; /* Connect von aussen!. */
|
|
#ifdef L1IRC
|
|
userpo->IrcMode = tcppoi->IrcMode;
|
|
#endif /* L1IRC */
|
|
|
|
ccpcvs(); /* Login in den Convers. */
|
|
|
|
ifpp = SetInterface(tcppoi->Interface); /* akt. Interface setzen. */
|
|
/* ggf. Logbuch fuehren. */
|
|
T_LOGL2(TRUE, "(IPConvogin):%s\n.Login in den Convermodus.\n"
|
|
, tcppoi-> ip);
|
|
return;
|
|
}
|
|
|
|
/* Aktuelle Zeichen auswerten. */
|
|
TRILLIAN GetContensCVS(char contens)
|
|
{
|
|
int i = 0;
|
|
char s[RXLEN];
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(GetContensCVS)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
/* Linkpartner? */
|
|
if (tcppoi->CVSlink)
|
|
{
|
|
/* Alles auf 0 setzen. */
|
|
tcppoi->cmdlen = 0;
|
|
tcppoi->rxc = 0;
|
|
|
|
/* Alle Zeichen vom Socket holen. */
|
|
while (tcppoi->rxc < tcppoi->RecvLen)
|
|
{
|
|
/* Aktuelle Zeichen. */
|
|
s[i] = tcppoi->rxbuf[tcppoi->rxc++];
|
|
|
|
/* Zeichen ein Return? */
|
|
if (s[i] == CR)
|
|
/* zum naechsten Zeichen. */
|
|
continue;
|
|
|
|
/* Zeichen ein Return? */
|
|
if (s[i] == LF)
|
|
{
|
|
tcppoi->cmd[tcppoi->cmdlen++] = CR;
|
|
/* zum naechsten Zeichen. */
|
|
continue;
|
|
}
|
|
|
|
/* Aktuelles Zeichen setzen. */
|
|
tcppoi->cmd[tcppoi->cmdlen++] = s[i++];
|
|
}
|
|
/* Nullzeichen setzen. */
|
|
tcppoi->cmd[tcppoi->cmdlen] = 0;
|
|
/* Frame ist komplett. */
|
|
return(YES);
|
|
}
|
|
else
|
|
/* User */
|
|
{
|
|
/* Zeichen ein Return? */
|
|
if (contens == CR)
|
|
/* Markiere es das es ein Return gibt. */
|
|
tcppoi->cr = TRUE;
|
|
|
|
/* Zeichen ein LF-Return? */
|
|
if (contens == LF)
|
|
/* LF moegen wir nicht. */
|
|
/* zum naechsten Zeichen. */
|
|
return(NO);
|
|
|
|
/* Alle Zeichen durch. */
|
|
if (contens == (int)NULL)
|
|
{
|
|
/* War ein Return dabei? */
|
|
if (tcppoi->cr)
|
|
{
|
|
tcppoi->cr = FALSE;
|
|
/* Frame ist komplett. */
|
|
return(YES);
|
|
}
|
|
else
|
|
/* Return fehlt, */
|
|
return(ERRORS);
|
|
}
|
|
|
|
/* User noch nicht eingeloggt? */
|
|
if (!tcppoi->login)
|
|
{
|
|
/* Zeichen auf Gueltigkeit pruefen. */
|
|
if (CheckContens(contens))
|
|
{
|
|
/* Ist es ein Linkpartner? */
|
|
if (!strncmp(tcppoi->cmd, "ppconvers", 9))
|
|
tcppoi->CVSlink = TRUE;
|
|
else
|
|
/* Ungueltiges Zeichen. */
|
|
/* zum naechsten Zeichen. */
|
|
return(NO);
|
|
}
|
|
}
|
|
|
|
/* Aktuelle Zeichen setzen. */
|
|
tcppoi->cmd[tcppoi->cmdlen++] = contens;
|
|
/* Zum naechsten Zeichen. */
|
|
return(NO);
|
|
}
|
|
|
|
return(ERRORS);
|
|
}
|
|
|
|
#ifdef OS_IPLINK
|
|
/* Speichern der IPCONV-Routen. */
|
|
void IPConvDump(MBHEAD *mbp)
|
|
{
|
|
int i;
|
|
char tmp[10];
|
|
char *linkstatus[] = {"User","Link"};
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvDump)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
putstr("; IPConv Routen\r;\r",mbp);
|
|
|
|
for (i = 0; i < ip_tbl_top; i++)
|
|
{
|
|
call2str(tmp, (char *)ip_tbl[i].name);
|
|
putprintf(mbp,"IPC R + %s %s %u %s\r"
|
|
,tmp
|
|
,ip_tbl[i].hostname
|
|
,ip_tbl[i].port
|
|
,ip_tbl[i].linkflag ? linkstatus[ip_tbl[i].linkflag] : linkstatus[ip_tbl[i].linkflag]);
|
|
}
|
|
putstr(";\r", mbp);
|
|
}
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* IPC-Route in TBL suchen. */
|
|
/* */
|
|
/******************************************************************************/
|
|
int IPConvIS(char *name, DEST *dest)
|
|
{
|
|
register int i;
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvIS)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
for (i = 0; i < ip_tbl_top; i++) /* Alle Eintraege durch gehen. */
|
|
{
|
|
if (cmpid(name, (char *)ip_tbl[i].name)) /* Rufzeichenvergleich. */
|
|
{
|
|
cpyid(dest->call, (char *)ip_tbl[i].name); /* Rufzeichen setzen. */
|
|
dest->port = ip_tbl[i].l2port; /* L2-Port setzen. */
|
|
|
|
dest->via[0] = 0; /* defaultwerte setzen. */
|
|
dest->typ = 'U';
|
|
dest->eax = 0;
|
|
|
|
return(TRUE); /* Eintrag gefunden. */
|
|
}
|
|
}
|
|
|
|
return(FALSE); /* Kein eintrag gefunden. */
|
|
}
|
|
|
|
/* Rufzeichen in der IPC-TBL suchen. */
|
|
int IPConvSearch(char *call)
|
|
{
|
|
register int i = 0;
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvSearch)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
/* Alle Eintraege durch gehen. */
|
|
for (i = 0; i < ip_tbl_top; ++i)
|
|
{
|
|
/* Vergleiche Call/SSID. */
|
|
if (cmpid(call, (char *)ip_tbl[i].name))
|
|
/* i = TBL-Nummer vom CALL. */
|
|
return(i);
|
|
}
|
|
/* Es gibt keinen Eintrag mit dem */
|
|
/* gesuchten Rufzeichen. */
|
|
return(EOF);
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
/* */
|
|
/* Neue IPC-Route hinzufuegen */
|
|
/* */
|
|
/*****************************************************************************/
|
|
void IPConvAddTBL(char *call,
|
|
unsigned char *host,
|
|
struct hostent *hstent,
|
|
unsigned short tport,
|
|
BOOLEAN link)
|
|
{
|
|
register int i;
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvAddTBL)";
|
|
#endif /* DEBUG_MODUS */
|
|
/* Suche Rufzeichen in der TBL. */
|
|
if ((i = IPConvSearch(call)) != EOF)
|
|
{ /* IPC-Route Aktualisieren. */
|
|
(void)memcpy(ip_tbl[i].hostname, host, HNLEN); /* Hostname setzen. */
|
|
|
|
ip_tbl[i].l2port = ifp[CVS_ID].l2port; /* L2-Port setzen. */
|
|
ip_tbl[i].port = tport; /* TCP-Port setzen. */
|
|
ip_tbl[i].linkflag = link; /* Status: User/Link setzen. */
|
|
}
|
|
else /* IPC-Route hinzufuegen. */
|
|
{
|
|
cpyid(ip_tbl[ip_tbl_top].name, call); /* Rufzeichen setzen*/
|
|
|
|
(void)memcpy(ip_tbl[ip_tbl_top].hostname, host, HNLEN);/* Hostname setzen.*/
|
|
(void)memcpy((unsigned char*)&ip_tbl[ip_tbl_top].ipaddr, (unsigned char *)&hstent->h_addr_list[0][0], 4);
|
|
|
|
ip_tbl[ip_tbl_top].l2port = ifp[CVS_ID].l2port; /* L2-Port eintragen. */
|
|
ip_tbl[ip_tbl_top].port = tport; /* TCP-Port eintragen. */
|
|
ip_tbl[ip_tbl_top].linkflag = link; /* Status: User/Link setzen. */
|
|
|
|
ip_tbl_top++; /* Ein Tabelleneintrag mehr */
|
|
}
|
|
}
|
|
|
|
/* IPCONV-Route loeschen. */
|
|
BOOLEAN IPConvDelTBL(char *name)
|
|
{
|
|
register int i;
|
|
register int j;
|
|
char tmp[10];
|
|
char *tmppoi = name;
|
|
WORD tmpcnt = strlen(name);
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvDelTBL)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
getcal(&tmpcnt, &tmppoi, TRUE, tmp);
|
|
|
|
for (i = 0; i < ip_tbl_top; ++i)
|
|
{
|
|
if (cmpid(tmp, (char *)ip_tbl[i].name))
|
|
{
|
|
for (j = i; j < ip_tbl_top; ++j)
|
|
ip_tbl[j] = ip_tbl[j+1];
|
|
|
|
/* Ein Tabelleneintrag weniger */
|
|
ip_tbl_top--;
|
|
return(TRUE);
|
|
}
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
/* IPConvers-Hostname lesen. */
|
|
BOOLEAN IPConvGetName(WORD *len, char **inbuf, BOOLEAN flag, char *outbuf)
|
|
{
|
|
char name[NAMESIZE + 1];
|
|
char *nampoi;
|
|
char zeichen;
|
|
char *p = *inbuf, *save_inbuf = *inbuf;
|
|
WORD n = *len, save_len = *len;
|
|
int plen = FALSE;
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvGetName)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
skipsp(&n, &p);
|
|
nampoi = name;
|
|
|
|
if (n)
|
|
{
|
|
while (n > 0)
|
|
{
|
|
zeichen = (char) toupper(*p);
|
|
if (zeichen == ' ')
|
|
break;
|
|
|
|
if ( ((zeichen >= '0') && (zeichen <= '9'))
|
|
|| ((zeichen >= 'A') && (zeichen <= 'Z')))
|
|
{
|
|
*nampoi++ = zeichen;
|
|
p++;
|
|
n--;
|
|
plen++;
|
|
|
|
if (plen > NAMESIZE)
|
|
return(FALSE);
|
|
|
|
continue;
|
|
}
|
|
n--;
|
|
p++;
|
|
}
|
|
|
|
name[plen] = 0;
|
|
strncpy(outbuf, name, NAMESIZE);
|
|
|
|
if (flag)
|
|
{
|
|
*len = save_len;
|
|
*inbuf = save_inbuf;
|
|
}
|
|
else
|
|
{
|
|
*len = n;
|
|
*inbuf = p;
|
|
}
|
|
return(TRUE);
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
/* IPConvers IP-Adresse lesen,. */
|
|
BOOLEAN IPConvGetIP(WORD *laenge, char **inbuf, unsigned char *outbuf)
|
|
{
|
|
char ipadresse[16 + 1];
|
|
char *ipaddrpoi;
|
|
char zeichen;
|
|
char *p = *inbuf;
|
|
WORD n = *laenge;
|
|
int len = FALSE;
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvGetIP)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
skipsp(&n, &p);
|
|
ipaddrpoi = ipadresse;
|
|
|
|
if (n)
|
|
{
|
|
while (n > 0)
|
|
{
|
|
zeichen = (char) toupper(*p);
|
|
if (zeichen == ' ')
|
|
break;
|
|
|
|
if ( (zeichen == '.')
|
|
|| ((zeichen >= '0') && (zeichen <= '9')))
|
|
{
|
|
*ipaddrpoi++ = zeichen;
|
|
p++;
|
|
n--;
|
|
len++;
|
|
|
|
if (len > 16)
|
|
return(FALSE);
|
|
|
|
continue;
|
|
}
|
|
p++;
|
|
n--;
|
|
}
|
|
|
|
ipadresse[len] = 0;
|
|
strncpy((char *)outbuf, (char *)ipadresse, 16);
|
|
|
|
*laenge = n;
|
|
*inbuf = p;
|
|
return(TRUE);
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
int IPConvConnect(char *call, char *upcall, BOOLEAN flag)
|
|
{
|
|
#ifdef DEBUG_MODUS
|
|
lastfunc = "l1ipconv(IPConvConnect)";
|
|
#endif /* DEBUG_MODUS */
|
|
|
|
if (IPConvConnectOS(call, upcall, flag))
|
|
return(TRUE);
|
|
|
|
return(FALSE);
|
|
}
|
|
#endif /* OS_IPLINK */
|
|
#endif /* L1IPCONV */
|
|
|
|
/* End of os/win32/ipconv.c */
|