Kali idea gia m$ linux library.

Nikos Mavroyanopoulos nmav at gnutls.org
Sat Sep 7 19:54:01 EEST 2002


On Fri, Sep 06, 2002 at 08:52:34PM +0300, George Kourtis wrote:

> Προσπαθώ να αναβαθμίσω παλιό κώδικα που λειτουργεί υλικό αυτόματης
> τηλεφωνίας (CTI AUDIOTEX κτλ).
> Η ανάπτυξη θα γίνει σε πλατφόρμα Windows διότι από τον κατασκευαστή
> καταργήθηκε (μάλλον προσωρινά) η υποστήριξη για Linux.
> Πρέπει όμως να παράγω κώδικα που να θέλει λίγες αλλαγές όταν θα αλλάξω
> πλατφόρμα. Επίσης θα ήθελα ένα μηχάνημα εφοδιασμένο με εξοπλισμό αυτόματης
> τηλεφωνίας να μπορεί να δέχεται εντολές από άλλο μηχάνημα που να έχει
> ενδεχωμένως και άλλο λειτουργικό.

Οπως σου είπε και ο Γιώργος, τα berkeley sockets, είναι 100% portable
μεταξύ διαφορετικών συστηματων (δεν έχω δει δικτυακό μηχάνημα να μην
εχει υποστήριξη γι'αυτά). 

Αμεσως μετά θα πρέπει να επιλέξεις το πως θα επικοινωνεί η εφαρμογή
σου πάνω απο τα sockets (προτόκολο εφαρμογής). 
Και εδώ έχεις επιλογές:

1. IETF SMTP-style. Χρησιμοποιείς αναγνώσιμα μηνύματα του στύλ:
 HELO nikos
 - 250 server Hello nikos at localhost
 MAIL FROM: nikos at nikos.org
 - 250 <nikos at nikos.org> is correct

 Εδώ οι binary δομές μεταφέρονται συνήθως με base64 encoding. Το
 πλεονέκτημα είναι μπορείς να κάνεις debug ευκολα (πχ με telnet)


2. ISO X.400-style. Χρησιμοποιείς ASN.1 με DER ή BER encoding rules.
 Εδώ θα χρειαστείς κάποιον ASN.1 compiler, αν δεν θέλεις να το κάνεις
 the hard way. Ενα πλεονέκτημα εδώ, είναι το σχεδιάζεις πολύ ευκολα[0] τα
 structures που χρησιμοποιείς. Πχ:

 XYZ ::= SEQUENCE {
	X	[0]	INTEGER OPTIONAL,
	Y	[1]	INTEGER,
	Z	[2]	INTEGER }


3. Custom made style. Αυτή είναι η επιλογή στην οποία καταλήγουν
 οι περισσότεροι, που δεν σχεδιάζουν προτόκολα για το IETF ή το ISO.
 Αυτό γιατι τα (1),(2) χρειάζονται αρκετά πολύπλοκους parsers.
 
 Ετσι βλέπεις στα περισσότερα specifications προτόκολων:
 Το πακέτο Hello, έχει:
   2 bytes το μέγεθος (ν)
   1 byte τον τύπο
   ν bytes το μήνυμα.

 που κάνει πολύ ευκολη τη ζωή του τελικού προγραμματιστή. To μειονέκτημα
 είναι οτι σπανίως είναι επεκτάσιμα αυτά τα προτόκολα.


[0]. Τα περισσότερα προτόκολα βέβαια φτάνουν σε ακρότητες όπως (X509):

 Name ::=   CHOICE { -- only one possibility for now --
                                 rdnSequence  RDNSequence }

 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

 RelativeDistinguishedName  ::=
                    SET SIZE (1 .. MAX) OF AttributeTypeAndValue

 AttributeTypeAndValue ::= SEQUENCE {
   type     AttributeType,
   value    AttributeValue }

 AttributeType ::= OBJECT IDENTIFIER

 AttributeValue ::= ANY DEFINED BY AttributeType


> Γιώργος Κούρτης

-- 
Nikos Mavroyanopoulos
mailto:nmav at gnutls.org



More information about the Linux-greek-users mailing list