Перейти к основному содержимому
Категории ai career dao links media notes philosophy security systems web
  1. Гисты/

Procmail config and PHP script for sending email source address and subject to given callsigns through APRS-IS.

·198 слов·1 минута· ·
Оглавление

Procmail config and PHP script for sending email source address and subject to given callsigns through APRS-IS.

.procmailrc
#

#LOGFILE=/home/nonoo/procmail.log
#VERBOSE=YES
:0
* ^List-ID: <aprs.nonoo.hu>$
| /home/nonoo/bin/mail2aprs.php
:0
* ^List-ID: <aprs.nonoo.hu>$
/dev/null
:0:
! nonoo@nonoo.hu

mail2aprs.php
#

#!/usr/bin/php5
<?php
    $aprs_callsign = 'CALLSIGN-15';
    $aprs_passcode = 0;
    $aprs_dsts = array('CALLSIGN-1', 'CALLSIGN-2');

    // Reading the message from stdin
    $f = fopen('php://stdin', 'r');
    while ($line = fgets($f)) {
        if (preg_match('/^Subject:/', $line))
            $msg = trim(str_replace('Subject: ', '', $line));
        if (preg_match('/^X-Original-Sender:/', $line))
            $from = trim(str_replace('X-Original-Sender: ', '', $line));
        if (isset($msg) && isset($from))
            break;
    }
    fclose($f);

    if (!isset($msg) || !isset($from))
        die();

    $msg = "$from: $msg";
    $msg = substr($msg, 0, 67); // Trimming string to max. 67 chars

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket) {
        $result = socket_connect($socket, 'hun.aprs2.net', 14580);
        if ($result) {
            // Authenticating
            $tosend = "user $aprs_callsign pass $aprs_passcode\n";
            socket_write($socket, $tosend, strlen($tosend));
            $authstartat = time();
            $authenticated = false;
            while ($msgin = socket_read($socket, 1000, PHP_NORMAL_READ)) {
                if (strpos($msgin, "$aprs_callsign verified") !== FALSE) {
                    $authenticated = true;
                    break;
                }
                // Timeout handling
                if (time()-$authstartat > 5)
                    break;
            }
            if ($authenticated) {
                foreach ($aprs_dsts as $dst) {
                    $tosend = "$aprs_callsign>APRS,TCPIP*::" . str_pad($dst, 9, ' ') . ":$msg\n";
                    socket_write($socket, $tosend, strlen($tosend));
                }
            }
        }
        socket_close($socket);
    }
?>