mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
test
This commit is contained in:
parent
b1d7006dfc
commit
cee0d425ab
3 changed files with 109 additions and 17 deletions
69
IRC.Mod
69
IRC.Mod
|
|
@ -1,10 +1,17 @@
|
||||||
MODULE IRC;
|
MODULE IRC;
|
||||||
IMPORT Internet, Out, Strings, types;
|
IMPORT Internet, Out, Strings := ooc2Strings, types;
|
||||||
|
|
||||||
CONST msgLen = 512; (* message length not more than 512 characters *)
|
CONST
|
||||||
|
msgLen* = 512; (* message length not more than 512 characters *)
|
||||||
|
ping* = "PING";
|
||||||
|
pong* = "PONG";
|
||||||
|
zzo* = "001";
|
||||||
|
mode* = "MODE";
|
||||||
|
join* = "JOIN";
|
||||||
|
|
||||||
VAR
|
VAR
|
||||||
connection : Internet.Socket;
|
connection : Internet.Socket;
|
||||||
|
eol* : ARRAY 3 OF CHAR;
|
||||||
|
|
||||||
PROCEDURE Auth*(user, nick, owner: ARRAY OF CHAR): BOOLEAN;
|
PROCEDURE Auth*(user, nick, owner: ARRAY OF CHAR): BOOLEAN;
|
||||||
VAR
|
VAR
|
||||||
|
|
@ -14,26 +21,57 @@ BEGIN
|
||||||
(* "USER test 0 * :test\r\n" *)
|
(* "USER test 0 * :test\r\n" *)
|
||||||
(* "NICK test\r\n\000\060 :test\r\n"*)
|
(* "NICK test\r\n\000\060 :test\r\n"*)
|
||||||
|
|
||||||
str1[0] := 0AX; str1[1] := 0DX; str1[2] := 0X;
|
|
||||||
|
|
||||||
COPY("USER ", str0);
|
COPY("USER ", str0);
|
||||||
Strings.Append(user, str0);
|
Strings.Append(user, str0);
|
||||||
Strings.Append(" 0 0 :", str0);
|
Strings.Append(" 0 * :", str0);
|
||||||
Strings.Append(owner, str0);
|
Strings.Append(owner, str0);
|
||||||
(* by the spec the command is terminated by \r\n *)
|
(* by the spec the command is terminated by \r\n *)
|
||||||
Strings.Append(str1, str0);
|
Strings.Append(eol, str0);
|
||||||
|
|
||||||
|
Strings.Append ("NICK ", str0);
|
||||||
|
Strings.Append (nick, str0);
|
||||||
|
Strings.Append(eol, str0);
|
||||||
|
Strings.Append(0X, str0);
|
||||||
|
|
||||||
Out.String("sending:"); Out.Ln;
|
Out.String("sending:"); Out.Ln;
|
||||||
Out.String(str0); Out.Ln;
|
Out.String(str0); Out.Ln;
|
||||||
b := Internet.Write(connection, str0, Strings.Length(str0));
|
b := Internet.Write(connection, str0);
|
||||||
IF b THEN Out.String("wrote!"); Out.Ln ELSE Out.String("write failed"); Out.Ln END;
|
|
||||||
COPY ("NICK ", str0);
|
|
||||||
Strings.Append (nick, str0);
|
|
||||||
Strings.Append(str1, str0);
|
|
||||||
IF b THEN Out.String("wrote!"); Out.Ln ELSE Out.String("write failed"); Out.Ln END;
|
IF b THEN Out.String("wrote!"); Out.Ln ELSE Out.String("write failed"); Out.Ln END;
|
||||||
|
|
||||||
RETURN b
|
RETURN b
|
||||||
|
|
||||||
END Auth;
|
END Auth;
|
||||||
|
|
||||||
|
PROCEDURE Receive*(VAR str: ARRAY OF CHAR): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
b: BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
b := Internet.Read(connection, str);
|
||||||
|
IF b THEN
|
||||||
|
Out.String("received:"); Out.Ln;
|
||||||
|
Out.String(str); Out.Ln;
|
||||||
|
ELSE
|
||||||
|
Out.String("receive failed"); Out.Ln;
|
||||||
|
END;
|
||||||
|
RETURN b
|
||||||
|
END Receive;
|
||||||
|
|
||||||
|
PROCEDURE Send*(str: ARRAY OF CHAR): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
b : BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
b := Internet.Write(connection, str);
|
||||||
|
IF b THEN
|
||||||
|
Out.String("sent:"); Out.Ln;
|
||||||
|
Out.String(str); Out.Ln;
|
||||||
|
ELSE
|
||||||
|
Out.String("sending failed"); Out.Ln;
|
||||||
|
END;
|
||||||
|
RETURN b
|
||||||
|
END Send;
|
||||||
|
|
||||||
PROCEDURE Connect*(host, port: ARRAY OF CHAR): BOOLEAN;
|
PROCEDURE Connect*(host, port: ARRAY OF CHAR): BOOLEAN;
|
||||||
VAR
|
VAR
|
||||||
res: BOOLEAN;
|
res: BOOLEAN;
|
||||||
|
|
@ -42,4 +80,15 @@ BEGIN
|
||||||
RETURN res
|
RETURN res
|
||||||
END Connect;
|
END Connect;
|
||||||
|
|
||||||
|
PROCEDURE Loop*;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
END Loop;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
eol[0] := 0AX; eol[1] := 0DX; eol[2] := 0X;
|
||||||
|
|
||||||
|
|
||||||
END IRC.
|
END IRC.
|
||||||
|
|
|
||||||
18
Internet.Mod
18
Internet.Mod
|
|
@ -1,5 +1,5 @@
|
||||||
MODULE Internet;
|
MODULE Internet;
|
||||||
IMPORT sockets, netdb, Platform, types, Out, SYSTEM;
|
IMPORT sockets, netdb, types, Strings, Out, Platform, SYSTEM;
|
||||||
|
|
||||||
TYPE
|
TYPE
|
||||||
|
|
||||||
|
|
@ -9,12 +9,14 @@ TYPE
|
||||||
Int32 = types.Int32;
|
Int32 = types.Int32;
|
||||||
Int64 = types.Int64;
|
Int64 = types.Int64;
|
||||||
|
|
||||||
PROCEDURE Write*(fd: Socket; VAR buf: ARRAY OF CHAR; len: LONGINT): BOOLEAN;
|
PROCEDURE Write*(fd: Socket; VAR buf: ARRAY OF CHAR): BOOLEAN;
|
||||||
VAR
|
VAR
|
||||||
l: SYSTEM.ADDRESS;
|
l: SYSTEM.ADDRESS;
|
||||||
r: INTEGER;
|
r: INTEGER;
|
||||||
|
len: LONGINT;
|
||||||
BEGIN
|
BEGIN
|
||||||
l := SYSTEM.ADR(buf);
|
l := SYSTEM.ADR(buf);
|
||||||
|
len := Strings.Length(buf)-1;
|
||||||
r := Platform.Write(fd, l, len);
|
r := Platform.Write(fd, l, len);
|
||||||
IF r = -1 THEN
|
IF r = -1 THEN
|
||||||
(*Out.String("write() failed."); Out.Ln;*)
|
(*Out.String("write() failed."); Out.Ln;*)
|
||||||
|
|
@ -25,6 +27,18 @@ BEGIN
|
||||||
END;
|
END;
|
||||||
END Write;
|
END Write;
|
||||||
|
|
||||||
|
PROCEDURE Read*(fd: Socket; VAR buf: ARRAY OF CHAR): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
p: SYSTEM.ADDRESS;
|
||||||
|
l, f: LONGINT;
|
||||||
|
r: INTEGER;
|
||||||
|
BEGIN
|
||||||
|
p := SYSTEM.ADR(buf);
|
||||||
|
l := LEN(buf);
|
||||||
|
f := 0;
|
||||||
|
r := Platform.Read(fd, p, l, f);
|
||||||
|
|
||||||
|
END Read;
|
||||||
|
|
||||||
PROCEDURE Connect*(host, port: ARRAY OF CHAR; VAR conn: Socket): BOOLEAN;
|
PROCEDURE Connect*(host, port: ARRAY OF CHAR; VAR conn: Socket): BOOLEAN;
|
||||||
VAR
|
VAR
|
||||||
|
|
|
||||||
39
test.Mod
39
test.Mod
|
|
@ -1,25 +1,54 @@
|
||||||
MODULE test;
|
MODULE test;
|
||||||
|
|
||||||
IMPORT IRC, Out;
|
IMPORT IRC, Out, Strings := ooc2Strings;
|
||||||
|
|
||||||
VAR
|
VAR
|
||||||
|
|
||||||
owner, user, nick, host, port, channel: ARRAY 32 OF CHAR;
|
owner, user, nick, host, port, channel: ARRAY 32 OF CHAR;
|
||||||
|
|
||||||
PROCEDURE testBot;
|
PROCEDURE testBot;
|
||||||
VAR b : BOOLEAN;
|
VAR
|
||||||
|
b, b2: BOOLEAN;
|
||||||
|
patternFound : BOOLEAN;
|
||||||
|
patternPos: INTEGER;
|
||||||
|
str, str2, str3: ARRAY 512 OF CHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF IRC.Connect(host, port) # FALSE THEN
|
IF IRC.Connect(host, port) # FALSE THEN
|
||||||
|
|
||||||
b := IRC.Auth(user, nick, owner);
|
b := IRC.Auth(user, nick, owner);
|
||||||
|
REPEAT
|
||||||
|
b := IRC.Receive(str);
|
||||||
|
Strings.Extract(str, 0, 4, str2);
|
||||||
|
IF Strings.Equal(str2, IRC.ping) THEN
|
||||||
|
(*b := IRC.Send(IRC.pong);*)
|
||||||
|
str[1] := 'O'; (* replace "PING" by "PONG" *)
|
||||||
|
b2 := IRC.Send(str);
|
||||||
|
ELSIF str[0] = ':' THEN
|
||||||
|
Out.String("':' found"); Out.Ln;
|
||||||
|
Strings.FindNext(IRC.zzo, str, 0, patternFound, patternPos);
|
||||||
|
IF patternFound THEN
|
||||||
|
Out.String("001 found"); Out.Ln;
|
||||||
|
COPY ("MODE ", str3);
|
||||||
|
Strings.Append(nick, str3);
|
||||||
|
Strings.Append(" +B", str3);
|
||||||
|
Strings.Append(IRC.eol, str3);
|
||||||
|
Strings.Append(0X, str3);
|
||||||
|
b2 := IRC.Send(str3);
|
||||||
|
COPY("JOIN ", str3);
|
||||||
|
Strings.Append("#oberon", str3);
|
||||||
|
Strings.Append(IRC.eol, str3);
|
||||||
|
Strings.Append(0X, str3);
|
||||||
|
b2 := IRC.Send(str3);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
UNTIL ~b;
|
||||||
END;
|
END;
|
||||||
END testBot;
|
END testBot;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
owner := "norayr_tanakian";
|
owner := "norayr_tanakian";
|
||||||
user := "norayr";
|
user := "norayr_tanakian";
|
||||||
nick := "arnet";
|
nick := "arnet_am";
|
||||||
host := "irc.freenode.net";
|
host := "irc.freenode.net";
|
||||||
port := "6667";
|
port := "6667";
|
||||||
channel := "#oberon";
|
channel := "#oberon";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue