Page 1 of 2 12 Last
  • Jump to page:
    #1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2013
    Posts
    7
    Rep Power
    0

    Send SMS Using GSM Modem


    Hello! i wanna create a form that can send sms to multiple recipient, i've created a form that uses javascript to add or remove textbox dynamically, and i want to know how do i make this form sends sms by using the sms code here

    my form:

    [PHPNET]
    PHP Code:
    <SCRIPT language="javascript">
            function 
    addRow(tableID) {

                var 
    table document.getElementById(tableID);

                var 
    rowCount table.rows.length;
                var 
    row table.insertRow(rowCount);

                var 
    cell1 row.insertCell(0);
                var 
    element1 document.createElement("input");
                
    element1.type "checkbox";
                
    element1.name="chkbox[]";
                
    cell1.appendChild(element1);

                var 
    cell2 row.insertCell(1);
                
    cell2.innerHTML rowCount 1;

                var 
    cell3 row.insertCell(2);
                var 
    element2 document.createElement("input");
                
    element2.type "text";
                
    element2.name "CTL_RECIPIENT";

                
    cell3.appendChild(element2);


            }

            function 
    deleteRow(tableID) {
                try {
                var 
    table document.getElementById(tableID);
                var 
    rowCount table.rows.length;

                for(var 
    i=0i<rowCounti++) {
                    var 
    row table.rows[i];
                    var 
    chkbox row.cells[0].childNodes[0];
                    if(
    null != chkbox && true == chkbox.checked) {
                        
    table.deleteRow(i);
                        
    rowCount--;
                        
    i--;
                    }


                }
                }catch(
    e) {
                    
    alert(e);
                }
            }

        
    </SCRIPT>






    <html>
    <head>
    <title>SMS via GSM</title>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
    <style>
       .clbody {
       font-family:Verdana, Arial, Helvetica, sans-serif;
       font-size:9pt;
       font-weight:normal;
    }
    .clfooter {
       font-family:Verdana;
       font-size:7pt;
       font-weight:normal;
    }
    h1, .h1 {
       width:100%;
       font-family:Verdana, Arial, Helvetica, sans-serif;
       font-size:18px;
       font-weight:bold;
    }
    hr, .hr {
       color:#b0b0b0;
    }
    </style>
    </head>

    <body class="clbody">
    <h1>SMS via GSM</h1>
    <div style="WIDTH:700px">

    </div>
    <hr size="1">


    <form>
    <table class ="clbody" width="700" border="1">

       <tr>
          <td valign="top">Recipient:</td>
          <td valign="top">

          <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />

        <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />

        <TABLE id="dataTable" width="350px" border="1">
            <TR>
                <TD><INPUT type="checkbox" name="chk"/></TD>
                <TD> 1 </TD>
                <TD> <input type="text" name="recipient" value=""> </TD>
            </TR>
        </TABLE>



         </td>
       </tr>
       <tr>
          <td valign="top">Message:</td>
          <td valign="top">



          <input style="width: 250px" type="text" name="msg" value=""></td>




       </tr>

          <tr>
          <td valign="top">Result code:<font color=green></td>
          <td valign="top"></td>
       </tr>   
       <tr>
          <td valign="top">&nbsp;</td>
          <td valign="top"><input size="25" type="submit" value="Send" name="CTL_SEND" style="height: 23px; width: 250px"></td>
       </tr>
    </table>
    <br>
    <br>
    </form>



    </body>
    </html> 
    [/PHPNET]

    Code to send sms
    PHP Code:
      [PHPNET=""]<?php


    error_reporting
    (E_ALL);

    //Example

    $gsm_send_sms = new gsm_send_sms();
    $gsm_send_sms->debug false;
    $gsm_send_sms->port 'COM6';
    $gsm_send_sms->baud 115200;
    $gsm_send_sms->init();

    $status $gsm_send_sms->send('+60182867376''testing 123');
    if (
    $status) {
        echo 
    "Message sent\n";
    } else {
        echo 
    "Message not sent\n";
    }

    $status $gsm_send_sms->send('+60193833271''testing 456');
    if (
    $status) {
        echo 
    "Message sent\n";
    } else {
        echo 
    "Message not sent\n";
    }

    $gsm_send_sms->close();







    //Send SMS via serial SMS modem
    class gsm_send_sms {

        public 
    $port 'COM6';
        public 
    $baud 115200;

        public 
    $debug false;

        private 
    $fp;
        private 
    $buffer;

        
    //Setup COM port
        
    public function init() {

            
    $this->debugmsg("Setting up port: \"{$this->port} @ \"{$this->baud}\" baud");

            
    exec("MODE {$this->port}: BAUD={$this->baud} PARITY=N DATA=8 STOP=1"$output$retval);

            if (
    $retval != 0) {
                throw new 
    Exception('Unable to setup COM port, check it is correct');
            }

            
    $this->debugmsg(implode("\n"$output));

            
    $this->debugmsg("Opening port");

            
    //Open COM port
            
    $this->fp fopen($this->port ':''r+');

            
    //Check port opened
            
    if (!$this->fp) {
                throw new 
    Exception("Unable to open port \"{$this->port}\"");
            }

            
    $this->debugmsg("Port opened");
            
    $this->debugmsg("Checking for responce from modem");

            
    //Check modem connected
            
    fputs($this->fp"AT\r");

            
    //Wait for ok
            
    $status $this->wait_reply("OK\r\n"5);

            if (!
    $status) {
                throw new 
    Exception('Did not receive responce from modem');
            }

            
    $this->debugmsg('Modem connected');

            
    //Set modem to SMS text mode
            
    $this->debugmsg('Setting text mode');
            
    fputs($this->fp"AT+CMGF=1\r");

            
    $status $this->wait_reply("OK\r\n"5);

            if (!
    $status) {
                throw new 
    Exception('Unable to set text mode');
            }

            
    $this->debugmsg('Text mode set');

        }

        
    //Wait for reply from modem
        
    private function wait_reply($expected_result$timeout) {

            
    $this->debugmsg("Waiting {$timeout} seconds for expected result");

            
    //Clear buffer
            
    $this->buffer '';

            
    //Set timeout
            
    $timeoutat time() + $timeout;

            
    //Loop until timeout reached (or expected result found)
            
    do {

                
    $this->debugmsg('Now: ' time() . ", Timeout at: {$timeoutat}");

                
    $buffer fread($this->fp1024);
                
    $this->buffer .= $buffer;

                
    usleep(200000);//0.2 sec

                
    $this->debugmsg("Received: {$buffer}");

                
    //Check if received expected responce
                
    if (preg_match('/'.preg_quote($expected_result'/').'$/'$this->buffer)) {
                    
    $this->debugmsg('Found match');
                    return 
    true;
                    
    //break;
                
    } else if (preg_match('/\+CMS ERROR\:\ \d{1,3}\r\n$/'$this->buffer)) {
                    return 
    false;
                }

            } while (
    $timeoutat time());

            
    $this->debugmsg('Timed out');

            return 
    false;

        }

        
    //Print debug messages
        
    private function debugmsg($message) {

            if (
    $this->debug == true) {
                
    $message preg_replace("%[^\040-\176\n\t]%"''$message);
                echo 
    $message "\n";
            }

        }

        
    //Close port
        
    public function close() {

            
    $this->debugmsg('Closing port');

            
    fclose($this->fp);

        }

        
    //Send message
        
    public function send($tel$message) {

            
    //Filter tel
            
    $tel preg_replace("%[^0-9\+]%"''$tel);

            
    //Filter message text
            
    $message preg_replace("%[^\040-\176\r\n\t]%"''$message);

            
    $this->debugmsg("Sending message \"{$message}\" to \"{$tel}\"");

            
    //Start sending of message
            
    fputs($this->fp"AT+CMGS=\"{$tel}\"\r");

            
    //Wait for confirmation
            
    $status $this->wait_reply("\r\n> "5);

            if (!
    $status) {
                
    //throw new Exception('Did not receive confirmation from modem');
                
    $this->debugmsg('Did not receive confirmation from modem');
                return 
    false;
            }

            
    //Send message text
            
    fputs($this->fp$message);

            
    //Send message finished indicator
            
    fputs($this->fpchr(26));

            
    //Wait for confirmation
            
    $status $this->wait_reply("OK\r\n"180);

            if (!
    $status) {
                
    //throw new Exception('Did not receive confirmation of messgage sent');
                
    $this->debugmsg('Did not receive confirmation of messgage sent');
                return 
    false;
            }

            
    $this->debugmsg("Message sent");

            return 
    true;

        }

    }

    ?>[/PHPNET]
  2. #2
  3. No Profile Picture
    Contributing User
    Devshed Loyal (3000 - 3499 posts)

    Join Date
    Jul 2003
    Posts
    3,457
    Rep Power
    594
    Please edit your post so the code is not all on one line. Remove the [ PHP ] tags then highlight the properly formatted code. Click the PHP icon.
    There are 10 kinds of people in the world. Those that understand binary and those that don't.
  4. #3
  5. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2013
    Posts
    7
    Rep Power
    0
    Originally Posted by gw1500se
    Please edit your post so the code is not all on one line. Remove the [ PHP ] tags then highlight the properly formatted code. Click the PHP icon.
    done
  6. #4
  7. No Profile Picture
    Contributing User
    Devshed Loyal (3000 - 3499 posts)

    Join Date
    Jul 2003
    Posts
    3,457
    Rep Power
    594
    Start by setting up your form to call your PHP page:
    Code:
    <form name="myform" action="<path to PHP page>" method="post">
    I don't know what you expect this to do:
    PHP Code:
    [PHPNET=""]<?php
    but I'm pretty sure it is not what you want, or at least it will not do what you expect.
    There are 10 kinds of people in the world. Those that understand binary and those that don't.
  8. #5
  9. Sarcky
    Devshed Supreme Being (6500+ posts)

    Join Date
    Oct 2006
    Location
    Pennsylvania, USA
    Posts
    10,907
    Rep Power
    6351
    PHPNET is a tag here on devshed, not part of his code. he double-highlighted it.

    That being said...are you sure this is even possible?
    HEY! YOU! Read the New User Guide and Forum Rules

    "They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." -Benjamin Franklin

    "The greatest tragedy of this changing society is that people who never knew what it was like before will simply assume that this is the way things are supposed to be." -2600 Magazine, Fall 2002

    Think we're being rude? Maybe you asked a bad question or you're a Help Vampire. Trying to argue intelligently? Please read this.
  10. #6
  11. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2013
    Posts
    7
    Rep Power
    0
    Originally Posted by gw1500se
    Start by setting up your form to call your PHP page:
    Code:
    <form name="myform" action="<path to PHP page>" method="post">
    I don't know what you expect this to do:
    [PHP]
    <?php

    but I'm pretty sure it is not what you want, or at least it will not do what you expect.
    i've successfully make this form sent sms, but only for one recipient, as i add another recipient and try to send sms, it fails and only sent to the first recipient only, second recipient does not receive message


    Code:
    <SCRIPT language="javascript">
            function addRow(tableID) {
    
                var table = document.getElementById(tableID);
    
                var rowCount = table.rows.length;
                var row = table.insertRow(rowCount);
    
                var cell1 = row.insertCell(0);
                var element1 = document.createElement("input");
                element1.type = "checkbox";
                element1.name="chkbox[]";
                cell1.appendChild(element1);
    
                var cell2 = row.insertCell(1);
                cell2.innerHTML = rowCount + 1;
    
                var cell3 = row.insertCell(2);
                var element2 = document.createElement("input");
                element2.type = "text";
                element2.name = "CTL_TEL";
    
                cell3.appendChild(element2);
    
    
            }
    
            function deleteRow(tableID) {
                try {
                var table = document.getElementById(tableID);
                var rowCount = table.rows.length;
    
                for(var i=0; i<rowCount; i++) {
                    var row = table.rows[i];
                    var chkbox = row.cells[0].childNodes[0];
                    if(null != chkbox && true == chkbox.checked) {
                        table.deleteRow(i);
                        rowCount--;
                        i--;
                    }
    
    
                }
                }catch(e) {
                    alert(e);
                }
            }
    
        </SCRIPT>
    
    	 <?php
    
    
    error_reporting(E_ALL ^ E_NOTICE);
    
    //Example
    
    $gsm_send_sms = new gsm_send_sms();
    $gsm_send_sms->debug = false;
    $gsm_send_sms->port = 'COM6';
    $gsm_send_sms->baud = 115200;
    $gsm_send_sms->init();
    
    
    $status = $gsm_send_sms->send($_POST["CTL_TEL"] , $_POST["CTL_MSG"]);
    if ($_GET["CTL_TEL"] >= 1) {
        //$success = "Message sent\n";
    	echo "success";
    } else {
        //$error = "Message not sent\n";
     echo "msg not sent";
    }
    
    
    
    $gsm_send_sms->close();
    
    
    
    
    
    
    
    //Send SMS via serial SMS modem
    class gsm_send_sms {
    
        public $port = 'COM6';
        public $baud = 115200;
    
        public $debug = false;
    
        private $fp;
        private $buffer;
    
        //Setup COM port
        public function init() {
    
            $this->debugmsg("Setting up port: \"{$this->port} @ \"{$this->baud}\" baud");
    
            exec("MODE {$this->port}: BAUD={$this->baud} PARITY=N DATA=8 STOP=1", $output, $retval);
    
            if ($retval != 0) {
                throw new Exception('Unable to setup COM port, check it is correct');
            }
    
            $this->debugmsg(implode("\n", $output));
    
            $this->debugmsg("Opening port");
    
            //Open COM port
            $this->fp = fopen($this->port . ':', 'r+');
    
            //Check port opened
            if (!$this->fp) {
                throw new Exception("Unable to open port \"{$this->port}\"");
            }
    
            $this->debugmsg("Port opened");
            $this->debugmsg("Checking for responce from modem");
    
            //Check modem connected
            fputs($this->fp, "AT\r");
    
            //Wait for ok
            $status = $this->wait_reply("OK\r\n", 5);
    
            if (!$status) {
                throw new Exception('Did not receive responce from modem');
            }
    
            $this->debugmsg('Modem connected');
    
            //Set modem to SMS text mode
            $this->debugmsg('Setting text mode');
            fputs($this->fp, "AT+CMGF=1\r");
    
            $status = $this->wait_reply("OK\r\n", 5);
    
            if (!$status) {
                throw new Exception('Unable to set text mode');
            }
    
            $this->debugmsg('Text mode set');
    
        }
    
        //Wait for reply from modem
        private function wait_reply($expected_result, $timeout) {
    
            $this->debugmsg("Waiting {$timeout} seconds for expected result");
    
            //Clear buffer
            $this->buffer = '';
    
            //Set timeout
            $timeoutat = time() + $timeout;
    
            //Loop until timeout reached (or expected result found)
            do {
    
                $this->debugmsg('Now: ' . time() . ", Timeout at: {$timeoutat}");
    
                $buffer = fread($this->fp, 1024);
                $this->buffer .= $buffer;
    
                usleep(200000);//0.2 sec
    
                $this->debugmsg("Received: {$buffer}");
    
                //Check if received expected responce
                if (preg_match('/'.preg_quote($expected_result, '/').'$/', $this->buffer)) {
                    $this->debugmsg('Found match');
                    return true;
                    //break;
                } else if (preg_match('/\+CMS ERROR\:\ \d{1,3}\r\n$/', $this->buffer)) {
                    return false;
                }
    
            } while ($timeoutat > time());
    
            $this->debugmsg('Timed out');
    
            return false;
    
        }
    
        //Print debug messages
        private function debugmsg($message) {
    
            if ($this->debug == true) {
                $message = preg_replace("%[^\040-\176\n\t]%", '', $message);
                echo $message . "\n";
            }
    
        }
    
        //Close port
        public function close() {
    
            $this->debugmsg('Closing port');
    
            fclose($this->fp);
    
        }
    
        //Send message
        public function send($tel, $message) {
    
            //Filter tel
            $tel = preg_replace("%[^0-9\+]%", '', $tel);
    
            //Filter message text
            $message = preg_replace("%[^\040-\176\r\n\t]%", '', $message);
    
            $this->debugmsg("Sending message \"{$message}\" to \"{$tel}\"");
    
            //Start sending of message
            fputs($this->fp, "AT+CMGS=\"{$tel}\"\r");
    
            //Wait for confirmation
            $status = $this->wait_reply("\r\n> ", 5);
    
            if (!$status) {
                //throw new Exception('Did not receive confirmation from modem');
                $this->debugmsg('Did not receive confirmation from modem');
                return false;
            }
    
            //Send message text
            fputs($this->fp, $message);
    
            //Send message finished indicator
            fputs($this->fp, chr(26));
    
            //Wait for confirmation
            $status = $this->wait_reply("OK\r\n", 180);
    
            if (!$status) {
                //throw new Exception('Did not receive confirmation of messgage sent');
                $this->debugmsg('Did not receive confirmation of messgage sent');
                return false;
            }
    
            $this->debugmsg("Message sent");
    
            return true;
    
        }
    
    }
    
    ?> 
    
    
    
    
    
    <html>
    <head>
    <title>SMS via GSM</title>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
    <style>
       .clbody {
       font-family:Verdana, Arial, Helvetica, sans-serif;
       font-size:9pt;
       font-weight:normal;
    }
    .clfooter {
       font-family:Verdana;
       font-size:7pt;
       font-weight:normal;
    }
    h1, .h1 {
       width:100%;
       font-family:Verdana, Arial, Helvetica, sans-serif;
       font-size:18px;
       font-weight:bold;
    }
    hr, .hr {
       color:#b0b0b0;
    }
    </style>
    </head>
    
    <body class="clbody">
    <h1>SMS via GSM</h1>
    <div style="WIDTH:700px">
    
    </div>
    <hr size="1">
    
    <?php
    error_reporting(E_ALL ^ E_NOTICE);
    ?>
    <form action="" method="post" name="myForm">
    <table class ="clbody" width="700" border="1">
    
       <tr>
          <td valign="top">Recipient:</td>
          <td valign="top">
    
          <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
    
        <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
    
        <TABLE id="dataTable" width="350px" border="1">
            <TR>
                <TD><INPUT type="checkbox" name="chk"/></TD>
                <TD> 1 </TD>
                <TD> <input type="text" name="CTL_TEL" value="<?php  echo $_GET['CTL_TEL']; ?>"> </TD>
            </TR>
        </TABLE>
    
    
    
         </td>
       </tr>
       <tr>
          <td valign="top">Message:</td>
          <td valign="top">
    
    
    
          <input style="width: 250px" type="text" name="CTL_MSG" value="<?php echo $_GET['CTL_MSG']; ?>"></td>
    
    
    
    
       </tr>
    
          <tr>
          <td valign="top">Result code:<font color=green></td>
          <td valign="top"></td>
       </tr>   
       <tr>
          <td valign="top">&nbsp;</td>
          <td valign="top"><input size="25" type="submit" value="Send" name="CTL_SEND" style="height: 23px; width: 250px"></td>
       </tr>
    </table>
    <br>
    <br>
    </form>
    
    
    
    </body>
    </html>
  12. #7
  13. No Profile Picture
    Contributing User
    Devshed Loyal (3000 - 3499 posts)

    Join Date
    Jul 2003
    Posts
    3,457
    Rep Power
    594
    I haven't used gsm_send but I've sent pages and messages via modem from a PHP server, if that is what you mean. Although now there are web services APIs that can do it without a modem.
    There are 10 kinds of people in the world. Those that understand binary and those that don't.
  14. #8
  15. No Profile Picture
    Contributing User
    Devshed Loyal (3000 - 3499 posts)

    Join Date
    Jul 2003
    Posts
    3,457
    Rep Power
    594
    Make your input list an array.
    Code:
    name="CTL_TEL[]"
    You can then loop through that array in your script.
    PHP Code:
    foreach ($tel as $_POST['CTL_TEL']) {
    .
    .
    .

    There are 10 kinds of people in the world. Those that understand binary and those that don't.
  16. #9
  17. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2013
    Posts
    7
    Rep Power
    0
    Originally Posted by gw1500se
    Make your input list an array.
    Code:
    name="CTL_TEL[]"
    You can then loop through that array in your script.
    PHP Code:
    foreach ($tel as $_POST['CTL_TEL']) {
    .
    .
    .

    This is the code that initialize sending sms is

    Code:
    $status = $gsm_send_sms->send($_POST["CTL_TEL"] , $_POST["CTL_MSG"]);
      
    if ($status) {
    	echo "Message sent\n";
    } else {
    	echo "Message not sent\n";
    }
    
    
    $gsm_send_sms->close();
    So where exactly do i need to put the loop? so that it detects recipient's number form and sent it?
  18. #10
  19. No Profile Picture
    Contributing User
    Devshed Loyal (3000 - 3499 posts)

    Join Date
    Jul 2003
    Posts
    3,457
    Rep Power
    594
    Put it around everything except the close. However, instead of using $_POST["CTL_TEL"] use $tel. You might also add that to your status messages so you know which succeeded and which failed.
    There are 10 kinds of people in the world. Those that understand binary and those that don't.
  20. #11
  21. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2013
    Posts
    7
    Rep Power
    0
    Originally Posted by gw1500se
    Put it around everything except the close. However, instead of using $_POST["CTL_TEL"] use $tel. You might also add that to your status messages so you know which succeeded and which failed.

    is this correct?

    Code:
    foreach ($tel as $_POST['CTL_TEL']) {
    
    $status = $gsm_send_sms->send($_POST["CTL_TEL"] , $_POST["CTL_MSG"]);
    
    
        
    
    if ($status) {
    	echo "Message sent\n";
    } else {
    	echo "Message not sent\n";
    }
    }
  22. #12
  23. No Profile Picture
    Contributing User
    Devshed Loyal (3000 - 3499 posts)

    Join Date
    Jul 2003
    Posts
    3,457
    Rep Power
    594
    Not quite:
    PHP Code:
    $status $gsm_send_sms->send($tel $_POST["CTL_MSG"]); 
    P.S. Note the use of PHP tags.
    There are 10 kinds of people in the world. Those that understand binary and those that don't.
  24. #13
  25. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2013
    Posts
    7
    Rep Power
    0
    Originally Posted by gw1500se
    Not quite:
    PHP Code:
    $status $gsm_send_sms->send($tel $_POST["CTL_MSG"]); 
    P.S. Note the use of PHP tags.
    Code:
    foreach ($tel as $_POST['CTL_TEL']) {
    
    
    $status = $gsm_send_sms->send($tel , $_POST["CTL_MSG"]); 
        
    
    if ($status) {
    	echo "Message sent\n";
    } else {
    	echo "Message not sent\n";
    }
    }
    Invalid argument supplied for foreach()

    truly sorry, i'm really newbie here didnt get much on how to use the loop
  26. #14
  27. No Profile Picture
    Contributing User
    Devshed Loyal (3000 - 3499 posts)

    Join Date
    Jul 2003
    Posts
    3,457
    Rep Power
    594
    Something is wrong with $_POST['CTL_TEL']. Do a var_dump($_POST) before the loop to see if CTL_TEL is really an array and contains the correct information. If not you need to fix your form so that it is.
    There are 10 kinds of people in the world. Those that understand binary and those that don't.
  28. #15
  29. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Aug 2011
    Location
    Sydney Australia
    Posts
    183
    Rep Power
    83
    Originally Posted by xmuzukerx

    PHP Code:
    <SCRIPT language="javascript">
            function 
    addRow(tableID) {

                var 
    table document.getElementById(tableID);

    <
    snip>
    ?> 
    Correct html for javascript is
    Code:
    <script type="text/javascript">
    language has been deprecated in favour of type

    http://www.w3.org/TR/REC-html40/interact/scripts.html
Page 1 of 2 12 Last
  • Jump to page:

IMN logo majestic logo threadwatch logo seochat tools logo