Főoldal | Adatszerkezetek | Könyvtárak | Fájllista | Adatmezők | Globális elemek

openrt.c fájlreferencia

#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <ctype.h>
#include <regex.h>
#include <locale.h>
#include <errno.h>

Ugrás a fájl forráskódjához.

Makródefiníciók

#define ERROR_NETWORK   3
#define ERROR_PARAM   4
#define ERROR_CODING   5
#define RET_OPENRELAY   1
#define RET_NOT_OPEN_RELAY   0

Függvények

int mailaddr_test (char *)
void get_params (int argc, char *argv[], struct param_t *p)
void default_params (struct param_t *p)
void print_message (char from, char *msg_text)
int send_message (int sock, char *msg_text, int verbose)
int rt_quit (int sock, int ret, int verbose)
int receive_message (int sock, int answer_ok, char *msg_text, int msg_len, int timeout, int verbose)
void usage (void)
int test_smtp (int sock, struct param_t *params)
int main (int argc, char *argv[])


Makródefiníciók dokumentációja

#define ERROR_CODING   5
 

programozási hiba, vagy standard függvények hibái

Definíció a(z) openrt.c fájl 30. sorában.

Hivatkozások: get_params(), mailaddr_test(), print_message(), rt_quit() és test_smtp().

#define ERROR_NETWORK   3
 

hálózati hiba

Definíció a(z) openrt.c fájl 26. sorában.

Hivatkozások: main(), receive_message() és rt_quit().

#define ERROR_PARAM   4
 

Elrontott paraméterezés a felhasználótól

Definíció a(z) openrt.c fájl 28. sorában.

Hivatkozások: get_params(), main() és rt_quit().

#define RET_NOT_OPEN_RELAY   0
 

Definíció a(z) openrt.c fájl 33. sorában.

Hivatkozások: receive_message(), rt_quit() és test_smtp().

#define RET_OPENRELAY   1
 

Definíció a(z) openrt.c fájl 32. sorában.

Hivatkozások: rt_quit() és test_smtp().


Függvények dokumentációja

void default_params struct param_t p  ) 
 

Alapéretlmezett adatok beírása az adatstruktúrába

Definíció a(z) openrt.c fájl 153. sorában.

Hivatkozások param_t::comment, param_t::from, param_t::help, param_t::port, param_t::timeout, param_t::to és param_t::verbose.

Hivatkozások: main().

void get_params int  argc,
char *  argv[],
struct param_t p
 

Paraméterek kinyerése, adatstruktura feltöltése

A program hívásakor megadott paramétereknek megfelelő értékeket állítja be az adatstuktúrában, valamint ellenőrzi is azokat.

Lehetésges paramétereink valának...

tesztlevél feladója

tesztlevél címzettje

További szöveg a tesztlevélbe az alapértelmezetten kívül

Ismeretlen opció

Ha maradt még feldolgozatlan paraméter, akkor az a host lesz - illetve muszáj annak lennie.

Ha még mindig van paraméter, akkor annak a port-nak kell lennie - ez már csak opcionális. Eldöntjük, hogy int-e, illetve megfelelő-e az értéke. Ha nincs port, akkor marad a default (default_params() állítja).

Ha még mindig van paraméter... az már nekünk tutira nem kell, valamit elírhatott a felhasználó.

Definíció a(z) openrt.c fájl 53. sorában.

Hivatkozások param_t::comment, ERROR_CODING, ERROR_PARAM, param_t::from, param_t::help, param_t::host, mailaddr_test(), param_t::port, param_t::timeout, param_t::to és param_t::verbose.

Hivatkozások: main().

int mailaddr_test char *  mailaddr  ) 
 

Mailcim ervenyessegenek tesztelese (regexp alapjan)

Paraméterek:
mailaddr char* Tesztelendo e-mail cim
Visszatérési érték:
int 0: OK, egyeb: hiba
Ez biztos nem jo e-mail cim

Egyszeru regexp, a hibak nagy reszet kiszuri

Itt mar komoly gondok vannak...

Definíció a(z) openrt.c fájl 473. sorában.

Hivatkozások ERROR_CODING.

Hivatkozások: get_params().

int main int  argc,
char *  argv[]
 

main() - szokasos argumentumok...

Rootkent inkabb ne hasznaljuk...

Ha nem adott meg parametert, akkor sugo

megadott parameterek kezelese

Teszt

Kapcsolat lezeras es kilepes

Definíció a(z) openrt.c fájl 505. sorában.

Hivatkozások default_params(), ERROR_NETWORK, ERROR_PARAM, get_params(), param_t::help, param_t::host, param_t::port, rt_quit(), test_smtp(), usage() és param_t::verbose.

void print_message char  from,
char *  msg_text
 

Verbose üzenetek kiírása a képernyőre

Tobb sorból álló üzenetket is kezel, minden sor elérakja a >>> <<< stringek valamelyikét a from paraméter értékétől függően (C, S)

Paraméterek:
from char Küldő: 'S', vagy 'C'
msg_text char Kiírandó üzenet
A -ekre nincs szükségünk, csak bekavarná az strtok-ot

tokenekre bontjuk, soronkent, majd soronkent kiirjuk

Definíció a(z) openrt.c fájl 171. sorában.

Hivatkozások ERROR_CODING.

Hivatkozások: receive_message() és send_message().

int receive_message int  sock,
int  answer_ok,
char *  msg_text,
int  msg_len,
int  timeout,
int  verbose
 

Üzenet vétele az SMTP szervertől (és ellenőrzése)

Paraméterek:
sock int kapcsolatazonosito
answer_ok int Ilyen valaszt varunk a szervertol. Ha nem ilyet mond, akkor ERROR_NETWORK koddal kilepunk. Ha 0, akkor figyelmen kivul hagyjuk es a fuggveny visszateresi erteke lesz az SMTP szerver altal kuldott kod.
msg_text char* Ide kerül a vett válasz
msg_len int Ennyi hely van a válasznak foglalva
timeout int Időtúllépés (másodperc)
verbose int Verbose-mód (1: igen, más: nem)
Csak az időtúllépés miatt van select()

Megkeresi az elso szokozt az uzenetben. Elotte lesz a kod, ami nekunk kell

Ervenyes-e az uzenetkod?

Ha ilyen kapunk, akkor tuti nem open-relay, ki is lephetunk

Talan nem a legszebb, de hatekony

Definíció a(z) openrt.c fájl 274. sorában.

Hivatkozások ERROR_NETWORK, print_message(), RET_NOT_OPEN_RELAY és rt_quit().

Hivatkozások: test_smtp().

int rt_quit int  sock,
int  ret,
int  verbose
 

Kilépés a programból és (igény szerint) a kapcsolat lezárása

Paraméterek:
sock int Kapcsolatazonosító. Ha nem -1, akkor lezárja close()-al.
ret int Visszatérési érték.
verbose int Verbose-mód (1: igen, más: nem)

Definíció a(z) openrt.c fájl 230. sorában.

Hivatkozások ERROR_CODING, ERROR_NETWORK, ERROR_PARAM, RET_NOT_OPEN_RELAY, RET_OPENRELAY és send_message().

Hivatkozások: main() és receive_message().

int send_message int  sock,
char *  msg_text,
int  verbose
 

Üzenet küldése az SMTP szervernek

Paraméterek:
sock int Kapcsolat-azonosító
msg_text char* Az elküldendő uzenet
verbose int Uzenet kiírása az stdin-re (1: igen, 0: nem)
Visszatérési érték:
int Hiba eseten -1, egyébként 0.

Definíció a(z) openrt.c fájl 214. sorában.

Hivatkozások print_message().

Hivatkozások: rt_quit() és test_smtp().

int test_smtp int  sock,
struct param_t params
 

SMTP szerver tesztelese

Paraméterek:
sock int Mar felepitett kapcsolat azonositoja
params struct param_t* A parancssorban megadott paramétereket feldolgozva tartalamzó tömb
Visszatérési érték:
int
Udvozlobanner fogadasa

Helyi gep nevenek meghatarozasa a koszoneshez

Koszonunk, HELO kuldese Az EHLO már advanced, és arra több sor is jöhet válaszként (a HELO-ra nem). Az RFC szerint minden SMTP-nek tudnia kell a HELO-t is (és tudják is)

250 OK-ot varunk

Fejlec - felado

Itt szokott 550 lenni

Ez lesz az uzenet

Valami oknal fogva megsem sikerult elkuldeni a levelet

Definíció a(z) openrt.c fájl 383. sorában.

Hivatkozások param_t::comment, ERROR_CODING, param_t::from, receive_message(), RET_NOT_OPEN_RELAY, RET_OPENRELAY, send_message(), param_t::timeout, param_t::to és param_t::verbose.

Hivatkozások: main().

void usage void   ) 
 

Hasznalati utasitas megjelenitese

Definíció a(z) openrt.c fájl 364. sorában.

Hivatkozások: main().


Projekt: labhf Készült: Thu Apr 13 00:40:40 2006 Készítette:   doxygen 1.4.2