RFC 1645
Simple Network Paging Protocol - Version 2
Status of This Memo β¨
Okay so this bit is the legal-ish fine print π This memo is Informational, which means it's sharing info with the Internet community. It is NOT a formal Internet standard of any kind, and it can be shared around as much as you want, no limits π¦
Abstract πΈ
Okay bestie, this RFC is all about a simple way to send pages (one-way!) to radio paging terminals, whether they're alphanumeric or numeric π Gateways that support this protocol, plus SMTP, have been running for several months for nationwide paging and messaging, and it's giving real-world proof π₯ Email filters and SNPP client software for Unix and Windows are free too, no cap π For more info, you contact the author.
Earlier versions of this spec were reviewed by IESG members and the "822 Extensions" Working Group. They wanted a different strategy instead, which is covered under "Relationship to Other IETF Work" further down π§
1. Introduction π
Beepers are as much a part of computer nerdom as X-terminals, maybe even more, unfortunately π The goal of the Simple Network Paging Protocol is to give everyone a standard way to deliver pages to individual paging terminals. The big win is that you don't need modems and phone lines just to send alphanumeric pages, and it's way easier to deliver pages to terminals in other cities or countries π Automatic page delivery should also be a lot more simplified, which is so relatable π«Ά
2. System Philosophy π¦
Radio paging gets taken for granted, because pagers are everywhere and everyone uses them π But the actual delivery of a page, especially in wider-area paging, is a whole process and it's kinda complicated π When a user starts a page, either by dialing a number on a telephone or typing an alphanumeric page into some input device, the page has to end up at some paging terminal, somewhere. Most of the time, that delivery happens using TAP (Telocator Alphanumeric input Protocol, also known as IXO). Honestly, TAP can get a little convoluted, with older-style ASCII control characters and a non-standard checksumming routine to help validate the data π
TAP is used all over the industry, but there are plans to move to a more flexible "standard" protocol called TME (Telocator Message Entry Protocol). The level two enhancements to SNPP (described below) are meant to work with this upcoming standard β¨
Even with all that complexity (or the lack of standardization, lol), the final user function is actually super simple: deliver a page from point-of-origin to someone's beeper π That's the simple, real-time function the base protocol is trying to handle. Validation of the paging information is left completely up to the paging terminal, which makes an SNPP gateway a direct "shim" between a paging terminal and the Internet π₯
3. Why not just use Email and SMTP? πββοΈ
Email is pretty reliable, but it's not always timely, and this is giving a perfect example π Picture this: deferred messaging happens when a gateway is down. Mary Ghoti (fish@hugecompany.org) sends a message to Zaphod Beeblebrox's beeper (5551212@pager.pagingcompany.com). Hugecompany's gateway to the Internet is down, so Mary's message gets deferred. Mary doesn't get notified about the delay, because her message hasn't actually failed to reach its destination. Three hours later, the link is back, and as soon as sendmail wakes up, the message goes out. Obviously, if Mary's page was about a meeting that was supposed to happen 2 hours ago, Mary and Zaphod have some minor admin stuff to sort out π
But if Mary had used her SNPP client (or just telnetted to the SNPP gateway), she would've instantly found out about the network problem π« She could've switched to plan "B" and called Zaphod's pager on the phone to ring him that way π
The real difference here isn't page delivery, it's getting an immediate heads-up that something is wrong with your message π¨ Standard email and SMTP are pretty reliable in most cases, but they can't be positively guaranteed between all nodes at all times, so they're less ideal for emergency or urgent paging. That inability to guarantee delivery could, rightly or wrongly, leave the service provider in an awkward spot with a client who just got their emergency page six hours too late π
Another perk of using a separate protocol for paging is that the sender gets absolute flexibility over what gets sent to the pager π In the paging world, messages go to alphanumeric pagers, so it's less desirable to send the recipient general header lines from a standard SMTP message. Most of that info is useless or redundant, and it wastes precious RF bandwidth π₯²
So when you're implementing an SMTP gateway, the service provider should choose to parse out the info that's needed (like the sender, and maybe the subject) to get the most out of the transmission. Parsing generally means the message originator has less control over content and format. SNPP gives you a clean, effective way to send a message, exactly as written, to the recipient's pager π
And honestly, SNPP is way simpler for manual telnet sessions than trying to hand-hack a mail message into a gateway π
4. The SNPP Protocol β¨
The SNPP protocol is a sequence of commands and replies, built on the same philosophy as lots of other Internet protocols in use today π§ It has several input commands (the first 4 characters of each are significant) that trigger different server responses, and those responses fall into four categories:
2xx - Successful, continue
3xx - Begin DATA input (see "DATA" command)
4xx - Failed with connection terminated
5xx - Failed, but continue session
The first character of every server response code is a digit that tells you the category of response. The text after the code can be changed to suit individual applications π
The session interaction is actually really simple (hence the name!) π The client starts the connection with the listening server. Once the connection is open, the server sends a "220" level message to say it's ready to accept SNPP commands. The client passes along the pager ID info and a message, then issues a "SEND" command. The server then feeds the info to the paging terminal, collects a response, and reports success or failure back to the client π₯
4.1 Examples of SNPP Transactions π¦
Here are some examples of client-server communication using SNPP π
4.1.1 A Typical Level One Connection πΈ
Client Server
Open Connection -->
<-- 220 SNPP Gateway Ready
PAGE 5551212 -->
<-- 250 Pager ID Accepted
MESS Your network is hosed -->
<-- 250 Message OK
SEND -->
<-- 250 Message Sent OK
QUIT -->
<-- 221 OK, Goodbye
4.1.2 A Typical Level Two, Multiple Transaction π
This example shows one message sent to two pagers π«Ά With this level of protocol, you can pick pager-specific options for each receiver by setting the option before you issue the "PAGEr" command. In this example, the first pager gets an alternate coverage area, and the second pager gets delayed messaging π
Client Server
Open Connection -->
<-- 220 SNPP Server Ready
COVE 2 -->
<-- 250 Alternate Area Selected
PAGE 5551212 FOOBAR -->
<-- 250 Pager ID Accepted
HOLD 9401152300 -0600 -->
<-- 250 Delayed Message OK
PAGE 5552323 XYZZY -->
<-- 250 Pager ID Accepted
SUBJ Seattle Meeting -->
<-- 250 Message Subject OK
DATA -->
<-- 354 Begin Input, End With '.'
Please meet me tomorrow at -->
the Seattle office -->
<-- 250 DATA Accepted
SEND -->
<-- 250 Message Sent OK
QUIT -->
<-- 221 OK, Goodbye
4.2 Level 1 Commands π
Level one commands are the minimum implementation of the protocol, so they're the basic core π§ This set of commands can be used with either TAP/IXO or TME for message delivery to the paging terminal.
4.2.1 PAGEr <Pager ID> π
The PAGEr command submits a pager ID (PID) number, to be included in the next messaging transaction. The PID has to live in the paging terminal and be validated there. Limited validation can happen on the server too (like checking that it's all numeric, or the ID length), or validation can be left to the terminal when the page is actually sent π
If you're implementing SNPP, the user can choose to support multiple recipients per message, but watch out, because validating before sending isn't possible with TAP/IXO (and it's not an official option in the current TME spec) π That means that to validate a PID, you basically have to generate a message to the pager, and then the terminal responds positively or negatively. When one PID in a sequence fails, showing that failure in a "standard format" can be a real challenge π
These are the possible responses from the SNPP server, with suggested text, in response to a PAGEr command:
250 Pager ID Accepted
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
550 Error, Invalid Pager ID
554 Error, failed (technical reason)
The level 2 enhancements affect the PAGEr command too, so check out the right section for the details π¦
4.2.2 MESSage <Alpha or Numeric Message> π
The MESSage command puts a single-line message into the gateway π Limited validation of the message can happen on the SNPP server (like checking the length), but type-of-message validation should be done by the paging terminal. If you duplicate the MESSage command before SENDing the message, you should get a "503 ERROR, Message Already Entered" message, and the user can keep going π
These are the possible responses from the SNPP server, with suggested text, in response to a MESSage command:
250 Message OK
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
503 ERROR, Message Already Entered
550 ERROR, Invalid Message
554 Error, failed (technical reason)
4.2.3 RESEt β¨
okay so RESEt is basically the "undo my whole mess" button π§Ή It clears everything already entered in the server session and puts it back to how it was when you first connected πΈ It's mainly there for when you accidentally typed something wrong during a manual session, bestie π
Here are the responses the SNPP server might send back for a RESEt command, with suggested text:
250 RESET OK
421 Too Many Errors, Goodbye (terminate connection
421 Gateway Service Unavailable (terminate connection)
4.2.4 SEND π
SEND is the moment of truth π€ It wraps up the current message transaction and sends the page off to the paging terminal π Before anything gets processed, the server should check that the PAGEr and MESSage fields (or the message DATA if you're using the level two option) actually have info in them. If one of those required fields is missing, the server should respond with "503 Error, Incomplete Information" and let the user keep going π If everything's complete, the SNPP server should format the page, send it to the paging terminal, and wait for a response π¦
Here are the suggested responses for a SEND command:
250 Message Sent Successfully
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
503 Error, Pager ID or Message Incomplete
554 Message Failed [non-administrative reason]
Now, if the pager ID is illegal or doesn't exist, or the page is being rejected for some other administrative reason, the server should respond with:
550 Failed, Illegal Pager ID (or other explanation)
And after a SEND, the server should stay online so the client can submit another transaction π§ no need to reconnect every time, periodt β¨
4.2.5 QUIT π
QUIT is the goodbye move π«Ά It ends the current session. The server should just reply with:
221 OK, Goodbye"
and then close the connection π
4.2.6 HELP (optional) π
The HELP command is optional, and it shows a screen of info about which commands the SNPP server supports π It's mostly for manual users of the gateway, so they're not left guessing π€ Each line of the HELP screen (the responses) gets a "214" code in front of it. Once the whole HELP sequence is done, a "250" series message gets sent π
Here are the suggested responses for a HELP command:
214 [Help Text] (repeated for each line of information)
250 End of Help Information
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
500 Command Not Implemented
4.3 Level 2 - Minimum Extensions π
This section lays out the minimum upgrades to SNPP for extra functionality. Level up, bestie π
4.3.1 DATA π
DATA is an alternate way to send a message, and it lets you deliver a message across multiple lines π It works a lot like the DATA command in SMTP (Internet STD10, RFC821), so if you know that one, you're already ahead π The SNPP server should only allow one DATA or MESSage command before a SEND.
Here are the suggested responses for a DATA command:
354 Begin Input; End with <CRLF>'.'<CRLF>
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
503 ERROR, Message Already Entered
500 Command Not Implemented
550 ERROR, failed (administrative reason)
554 ERROR, failed (technical reason)
When the client gets a "354" response, it starts typing in the message line by line π¬ A single period (.) in the first position of a line ends the input. After that, the server may respond with:
250 Message OK
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
550 ERROR, Invalid Message (or administrative reason)
554 ERROR, Failed (technical reason)
4.4 Level 2 - Optional Extensions π
This section talks about upgrades that give you more control over paging ποΈ They're mostly designed to match the extra features built into the Telocator Message Entry (TME) protocol from the TDP protocol suite π§© These functions may, optionally (as the author is doing), be built into a paging terminal. There's no requirement to implement all of them, but if someone asks for a function that isn't supported, the server should return a "500 Function Not Implemented" error π ββοΈ
Heads up: at the time of this publication, the TME standard is still not finalized π§
4.4.1 LOGIn <loginid> [password] π
LOGIn lets you set a session login ID. It's how the system checks who's trying to get into the paging terminal π΅οΈββοΈ If you never send a LOGIn command, you're treated as an "anonymous" user π
Here are the suggested responses for a LOGIn command:
250 Login Accepted
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
421 Illegal Access Attempt
550 Error, Invalid LoginID or Password
554 Error, failed (technical reason)
4.4.2 PAGEr <PagerID> [Password/PIN] π
This PAGEr is the upgraded version of the level one one π The big difference is that you can now add a password or PIN for validation or to unlock features π
Before you go further, you need to get how PAGEr works alongside the LEVEl, COVErage, HOLDtime, and ALERt commands (the option parameters described below) π§ Every time you send a PAGEr command, think of it as the last step in a multi-step transaction β¨
When PAGEr gets processed, the pager ID (and password) gets submitted to the paging terminal along with LEVEl, COVErage, HOLDtime, and ALERt. If you haven't changed those parameters, their defaults are used for the transaction. Once the next PAGEr command has been processed, those option parameters go back to their defaults π This "option-option- option-go" setup means you can give "Jeff" a different priority level and "Kathy" a different coverage area, all while sending the same message to both of them π«£
Here are the suggested responses for a PAGEr command:
250 Pager ID Accepted
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
550 Error, Invalid Pager ID or Password
554 Error, failed (technical reason)
4.4.3 LEVEl <ServiceLevel> π¦
LEVEl sets an optional alternate service level for the next PAGEr command β±οΈ Ideally, "ServiceLevel" should be an integer from 0 to 11 inclusive. Here's what the TME protocol says each number means:
0 - Priority
1 - Normal (default)
2 - Five minutes
3 - Fifteen minutes
4 - One hour
5 - Four hours
6 - Twelve hours
7 - Twenty Four hours
8 - Carrier specific '1'
9 - Carrier specific '2'
10 - Carrier specific '3'
11 - Carrier specific '4'
How this feature gets implemented, and how far it goes, is optional and up to the carrier π€·ββοΈ
Here are the suggested responses for a LEVEl command:
250 OK, Alternate Service Level Accepted
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
500 Command Not Implemented
550 Error, Invalid Service Level Specified
554 Error, failed (technical reason)
4.4.4 ALERt <AlertOverride> π
ALERt is optional, and it lets you override the default on whether the subscriber gets alerted when a message comes in π³ Like LEVEl, it changes the parameters that get sent to the paging terminal with PAGEr. The TME protocol defines AlertOverride as either 0-DoNotAlert, or 1-Alert.
Here are the suggested responses for an ALERt command:
250 OK, Alert Override Accepted
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
500 Command Not Implemented
550 Error, Invalid Alert Parameter
554 Error, failed (technical reason)
4.4.5 COVErage <AlternateArea> πΊοΈ
COVErage is optional too, and it overrides the subscriber's default coverage area so you can pick a different region π Like the previous command, it changes the parameters sent to the paging terminal with PAGEr. AlternateArea is a designator for one of these:
- A subscriber-specific alternate coverage area
- A carrier-defined region available to subscribers
Let's look at an example, because it's giving real life πββοΈ Mary Ghoti has local service in Chicago, Illinois (Mary's region '1'). Her account is set up so her pager can be paged nationwide on demand (Mary's region '2'). If you specify "COVErage 2" before the right "PAGEr" command, the default Chicago area gets overridden, and Mary's pager gets messaged nationally for that transaction π£ The carrier providing Mary's service is assumed to keep track of how many pages were sent to her pager this way, and to bill her for them πΈ
Here are the suggested responses for a COVErage command:
250 Alternate Coverage Selected
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
500 Command Not Implemented
550 Error, Invalid Alternate Region
554 Error, failed (technical reason)
4.4.6 HOLDuntil <YYMMDDHHMMSS> [+/-GMTdifference] β³
HOLDuntil lets you delay delivery of a message to a particular subscriber until after the time you specify π€ The time can be in local time (for example, local to the paging terminal), or you can add an extra parameter for the offset from GMT (so "-0600" means Eastern Standard Time, in other words π). Like the previous command, this one changes the parameters sent to the paging terminal with PAGEr.
Here are the suggested responses for a HOLDuntil command:
250 Delayed Messaging Selected
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
500 Command Not Implemented
550 Error, Invalid Delivery Date/Time
554 Error, failed (technical reason)
4.4.7 CALLerid <CallerID> π
CALLerid is a message-oriented function, which is different from the subscriber-oriented ones we just went through π It lets you specify the CallerIdentifier function described in TME. This parameter is optional, and it's up to the carrier how it gets implemented or used π
Here are the suggested responses for a CALLerid command:
250 Caller ID Accepted
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
500 Command Not Implemented
550 Error, Invalid Caller ID
554 Error, failed (technical reason)
4.4.8 SUBJect <MessageSubject> π¦
okay so SUBJect is the message-oriented one π it lets the sender set a subject for the next message that gets sent. this param is optional, and it's totally up to the carrier how they wanna implement or use it π€·ββοΈ
when a client sends SUBJect, the SNPP server can reply with these suggested responses:
250 Message Subject Accepted
421 Too Many Errors, Goodbye (terminate connection)
421 Gateway Service Unavailable (terminate connection)
500 Command Not Implemented
550 Error, Invalid Subject Option
554 Error, failed (technical reason)
4.5 Illegal Commands π ββοΈ
bestie, if the client sends an illegal command, the server may respond in one of two ways:
421 Too Many Errors, Goodbye (terminate connection)
500 Command Not Implemented, Try Again
how many illegal commands get allowed before the connection gets cut should be at the discretion of the operator of the SNPP server. the only response we haven't talked about yet is:
421 SERVER DOWN, Goodbye
this one is for refusing or terminating connections when the gateway is administratively down, or when there's some other technical or administrative problem with the paging terminal π
4.6 Timeouts β°
the SNPP server can, optionally, have an inactivity timeout set up. when the allotted time runs out, the server replies 421 Timeout, Goodbye and closes the connection π«₯
4.7 Rigidity of Command Structure π
the commands from client to server should stay constant. however, since the first character of the response tells you success or failure, the text of the server responses could be changed to suit the tastes of the operator of the SNPP server. it is suggested that the response codes mirror SMTP response codes as closely as possible πΈ
5. Revision History π
originally, when it was first proposed, the author used POP2 style result/response codes π°οΈ the Internet community suggested that this '+' and '-' style be swapped for numeric response codes, similar to the ones used in other services like SMTP. the protocol was changed to this specification from the first proposed draft β¨
administrative errors (like an Illegal Pager ID) got separated from technical errors (like being out of space on disk). administrative failures are generally preceded by a 550 series response, while technical failures get a 554 series code π
level two enhancements were added in preparation for TME deployment π
the error code 502 Command not implemented was changed to a general 500 Command not recognized failure result, to follow SMTP more closely π
6. Relationship to Other IETF Work π
the strategy of this specification, and many of its details, were reviewed by an IETF Working Group and three IESG members. they concluded that an approach using the existing email infrastructure was preferable, mostly because deploying a brand new protocol is super expensive and the Internet's most widely-distributed applications protocol infrastructure is a huge advantage π¬ most reviewers felt no new protocol was needed at all, because the special "deliver immediately or fail" requirements of SNPP could be achieved by careful configuration of clients and servers. the experimental network printing protocol [4] was pointed to as an example of an existing infrastructure approach to an existing problem π¨οΈ other reviewers believed a case could be made for new protocol details to identify paging clients and servers to each other and negotiate the details of transactions, but that it would be more sensible to handle those as extensions to SMTP [1, 2] rather than deploying a new protocol structure π§©
the author, while recognizing these positions, believes there is merit in a separate protocol. it isolates the details of TAP/IXO and its evolving successors from users, and from mail-based approaches that might reach systems acting as SMTP/MIME [3] to SNPP gateways π such systems and gateways are, in fact, being designed and developed alongside this work π οΈ see the section "Why not just use Email and SMTP?" for more of the author's take on the classical electronic email approach π
7. References π
- [1] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821, USC/Information Sciences Institute, August 1982.
- [2] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D. Crocker, "SMTP Service Extensions", United Nations University, Innosoft, Dover Beach Consulting, Inc., Network Management Associates, Inc., The Branch Office, RFC 1425, February 1993.
- [3] Borenstein, N., and N. Freed, "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies", RFC 1521, Bellcore, Innosoft, September 1993.
- [4] Rose, M., and C. Malamud, "An Experiment in Remote Printing", RFC 1486, Dover Beach Consulting, Inc., Internet Multicasting Service, July 1993.
8. Security Considerations π
okay, big moment π± security issues are not discussed in this memo. so, like, bestie, be careful out there π«£π
9. Author's Address π
R. Allen Gwinn, Jr.
Associate Director, Computing Services
Business Information Center
Southern Methodist University
Dallas, TX 75275
Phone: 214/768-3186
EMail: allen@mail.cox.smu.edu or allen@sulaco.lonestar.org
that's the whole RFC, bestie! ππ the end π
π¦ where this page comes from
- ietf: rfc1645 1994-07
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms