473,394 Members | 1,866 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,394 software developers and data experts.

my newsgroup base database. (test)

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Project: Network News Transport Protocol Server Program
Description:
基于数据库的新闻组,实现BBS前端使 NNTP协议来访问贴*
Reference:
NNTP协议: http://www.mibsoftware.com/userkt/0099.htm
*则表达式:
http://wiki.woodpecker.org.cn/moin/R...de24613d941e9d

-------------------------------------------------------------------------
python-chinese
Post: send py************@lists.python.cn
Subscribe: send subscribe to py********************@lists.python.cn
Unsubscribe: send unsubscribe to
py********************@lists.python.cn
Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------------------------------------------------------------------
"""

import sys
import socket
import threading
import time
import asyncore, asynchat
import string, StringIO, re
#from netkiller import *
#import testMessages
from messages import Messages

#print Messages.banner

class nntp_server (asyncore.dispatcher):

channel_counter = 0

def __init__ (self, host, port):
asyncore.dispatcher.__init__ (self)
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.there = (host, port)
self.bind (self.there)
self.listen (5)
def handle_connect(self):
pass
def handle_accept (self):
conn, addr = self.accept()
nntp_receiver (self, (conn, addr))
def handle_error(self):
pass
def handle_close (self):
self.close()

class nntp_receiver (asynchat.async_chat):

def __init__ (self, server, (conn, addr)):
asynchat.async_chat.__init__ (self, conn)
self.set_terminator ('\r\n')
self.server = server
self.server.channel_counter = self.server.channel_counter + 1
self.id = self.server.channel_counter
#self.sender = nntp_sender (self, server.there)
#self.sender.id = self.id
self.buffer = ''
self.handle_connect()
self.current_group = group_selected(None)
def handle_connect (self):
if self.connected :
self.push(Messages.banner)

def collect_incoming_data (self, data):
self.buffer = self.buffer + data

def found_terminator (self):
data = self.buffer
self.buffer = ''
if self.get_terminator() == '\r\n':
parse = self.isCommand(data)
if parse:
parse[0] = parse[0].lower()
self.log('command:'+parse[0])
usenet(self,parse,self.current_group)
if parse[0] == 'post':
self.set_terminator ('.\r\n')
if parse[0] == 'quit':
self.handle_close()
else:
usenet(self,['post',data],self.current_group)
self.set_terminator ('\r\n')

message = '<== (%d) %s' % (self.server.channel_counter,
repr(data))
self.log(message)
#self.log('current:'+self.current_group.get_group( ))
#self.sender.push (data + '\n')
def close_when_done():
pass
def handle_close (self):
self.log('Closing')
self.server.channel_counter = self.server.channel_counter - 1
#self.sender.close()
self.close()

def isCommand(self,data):
rcommand = (
r'^mode [reader|stream]',
r'^list$',r'^list
[active|active.times|newsgroups|subscriptions]',
r'^xover [0-9]+-[0-9]+',
r'^newgroups [0-9]+ [0-9]+ ',
r'^group .+',
r'^newgroups [0-9]+ [0-9]+ [a-zA-Z]',
r'^head [0-9]+',
r'^body [0-9]+',
r'^article [0-9]+',
r'^post$',r'^next$',r'^last$',
r'^ihave$',r'^slave$',
r'^help$',r'^quit$'
)
parse = []
for command in rcommand:
digs = re.compile(command,re.IGNORECASE)
if digs.match(data):
parse = data.split(' ')
return parse
self.push("500 command not recognized\r\n")
return None
"""
class nntp_sender (asynchat.async_chat):

def __init__ (self, receiver, address):
asynchat.async_chat.__init__ (self)
self.receiver = receiver
self.set_terminator (None)
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
self.buffer = ''
self.set_terminator ('\n')
self.connect (address)

def handle_connect (self):
print 'Connected'

def collect_incoming_data (self, data):
self.buffer = self.buffer + data

def found_terminator (self):
data = self.buffer
self.buffer = ''
print '==(%d) %s' % (self.id, repr(data))
self.receiver.push (data + '\n')

def handle_close (self):
self.receiver.close()
self.close()
"""
class group_selected:
#current = None
def __init__(self,value):
self.set_group(value)
def set_group(self,value):
self.current = value
def get_group(self):
return self.current

class usenet:
#threading.Thread
conn = None
addr = None
buffer = None
msg = None
conn = None
current_group = None
HELP = """\
HELP \r\n
100 Legal commands \r\n
authinfo user Name|pass Password \r\n
article [MessageID|Number] \r\n
body [MessageID|Number] \r\n
check MessageID \r\n
date \r\n
group newsgroup \r\n
head [MessageID|Number] \r\n
help \r\n
ihave \r\n
last \r\n
list [active|active.times|newsgroups|subscriptions] \r\n
listgroup newsgroup \r\n
mode stream \r\n
mode reader \r\n
newgroups yymmdd hhmmss [GMT] [<distributions>] \r\n
newnews newsgroups yymmdd hhmmss [GMT] [<distributions>] \r\n
next \r\n
post \r\n
slave \r\n
stat [MessageID|Number] \r\n
takethis MessageID \r\n
xgtitle [group_pattern] \r\n
xhdr header [range|MessageID] \r\n
xover [range] \r\n
xpat header range|MessageID pat [morepat...] \r\n
.. \r\n"""

def __init__(self, conn,command,current_group):
self.conn = conn
self.buffer = buffer
self.msg = Messages()
self.current_group = current_group
command[0] = command[0].lower()
self.commands(command)
def welcome(self):
self.conn.send(self.msg.banner)
def commands(self, command):
if not buffer: return True
if command[0] == 'mode':
self.conn.push(self.msg.banner)
elif command[0] == 'list':
lists = self.msg.list()
length = str(len(lists))
self.conn.send("215 list of newsgroups follows\r\n")
for group in lists:
self.conn.push(group+"\r\n")
self.conn.push(".\r\n")
elif command[0] == 'group':
current = command[1]
isNone = self.msg.group(current)
if not isNone:
Responses(self.conn,411)
else:
self.current_group.set_group(current)
number,first,last,group = isNone
self.conn.push("211 " +number+' '+first+' '+last+'
'+group+ " selected\r\n")
elif command[0] == 'newgroups':
#newgroups = self.msg.newgroups(950803,192708,'GMT')
#length = len(newgroups)
self.conn.push("231 list of new newsgroups follows.\r\n")
#for name in newgroups:
# self.conn.push(name+"\r\n")
self.conn.push(".\r\n")
elif command[0] =='article':
MessageID = command[1]
text = self.msg.article(MessageID)
self.conn.push("220 "+MessageID+"
<ma**********@lists.mozilla.orgarticle retrieved - head and body
follows\r\n")
self.conn.push(text)
self.conn.push(".\r\n")
elif command[0] =='head':
MessageID = command[1]
self.conn.push("221 "+MessageID+"
<ma**********@lists.mozilla.org>\r\n")
self.conn.push(".\r\n")
elif command[0] =='body':
MessageID = command[0]
self.conn.push("222 "+MessageID+"
<ma**********@lists.mozilla.org>\r\n")
self.conn.push(".\r\n")
elif command[0] == 'xover':
if not self.current_group.get_group():
Responses(self.conn,412)
return
xover = command[1]
first, last = xover.split('-')
xovers = self.msg.xover(first,last)
#length = len(xovers)
self.conn.push("224 xover information follows\r\n")
"""
412 no newsgroup has been selected
"""
for xover in xovers:
self.conn.push( xover + "\r\n")
self.conn.push(".\r\n")
elif command[0] =='xhdr':
xhdr = command[1]
subject, range = xhdr.split(' ')
first, last = range.split('-')
self.msg.xhdr('subject',first,last)
#length = len(xover_list)
self.conn.push("221 "+subject+" field follows\r\n")
for xo in xover_list:
self.conn.send( xo + "\r\n")
self.conn.send(".\r\n")
elif command[0] == 'post':
if len(command) == 1:
self.conn.push("340 send article\r\n")
elif len(command) == 2:
data = command[1]
self.msg.post(data)
Responses(self.conn,240)
elif command[0] == 'rset':
self.conn.push("250 OK\r\n")
elif command[0] =='help':
self.conn.push(self.HELP)
elif command[0] =='quit':
self.conn.push("205 closing connection - goodbye!\r\n")
return True

def close(self):
self.conn.close()
self.buffer = None
self.conn = None
self.addr = None

class Responses:
conn = None
def __init__(self,conn,status):
self.conn = conn
if status == 205:
pass
elif status == 224:
self.conn.push('224 Overview information follows\r\n')

elif status == 240:
self.conn.push('240 article posted ok\r\n')
elif status == 340:
self.conn.push('340 send article to be posted. End with
<CR-LF>.<CR-LF>\r\n')
elif status == 411:
self.conn.push('411 no such news group\r\n')
elif status == 412:
self.conn.push('412 No news group current selected\r\n')
elif status == 420:
self.conn.push('420 No article(s) selected\r\n')

elif status == 440:
self.conn.push('440 posting not allowed\r\n')
elif status == 441:
self.conn.push('441 posting failed\r\n')
elif status == 502:
self.conn.push('502 no permission\r\n')

def main():
try:
nntpd = nntp_server('127.0.0.1',119)
asyncore.loop()
except KeyboardInterrupt:
print "Crtl+C pressed. Shutting down."
if __name__ == '__main__':
main()

Jul 4 '06 #1
2 2400

Netkiller 写道:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Project: Network News Transport Protocol Server Program
Description:
基于数据库的新闻组,实现BBS前端使 NNTP协议来访问贴*

import sys,re
import MySQLdb

class NewsDB:
conn = None
cursor = None
def connect(self):
try:
conn = MySQLdb.connect (host = "localhost",
user = "root",
passwd = "chen",
db = "usenet")
except MySQLdb.Error, e:
print "Error %d: %s" % (e.args[0], e.args[1])
sys.exit (1)
def fetchone(self,sql):
self.connect()
self.cursor = conn.cursor ()
self.cursor.execute (sql)
row = self.cursor.fetchone ()
#print "server version:", row[0]
self.close()
return row
def fetchall(self):
self.connect()
self.cursor = conn.cursor ()
self.cursor.execute (sql)
all = self.cursor.fetchall ()
#print "server version:", row[0]
self.close()
return all
def close(self):
self.cursor.close ()
self.conn.close()
class abstract:
subject = None
mail_from = None
rcpt_to = None
data = None

group = ""

grouplist = (
("cn.comp.linux", 5, 2, "y"),
("cn.comp.freebsd", 3, 2, "y"),
("cn.comp.dos", 10, 4, "y"),
("cn.test", 5, 2, "y"),
("comp.lang.python", 5, 2, "y")
)
def welcome(self):
return 'Welcome'
def list (self):
lists = []
for name, last, first, mode in self.grouplist:
lists.append(name+ " " + str(last) + " " + str(first) +" "+
mode)
return lists
def group(self,groupname):
group_rang = ""
for name, last, first, mode in self.grouplist:
if name == groupname:
group_rang = str(last - first)+" "+ str(first)+"
"+str(last)
break
return group_rang
def xover(self,first,last):
xover_tmp = []
xover_tmp.append("""2 Mozilla programmer needed for
children's learning program "John Fodor, PhD" <fo***@ilt-inc.com>
Mon, 23 Jan 2006 12:01:09 -0500
<ma******************************@lists.mozilla.or g 10532
276 Xref: number1.nntp.dca.giganews.com mozilla.jobs:2""")
xover_tmp.append("""3 mozilla expert needed "Paul
Sponagl" <sp*****@7val.com Tue, 7 Mar 2006 20:00:52 +0100
<ma********************************@lists.mozilla. org 2913
41 Xref: number1.nntp.dca.giganews.com mozilla.jobs:10""")
return xover_tmp
def head(self):
self.xover(first,last)
def xhdr(self,first,last):
xover_tmp = []
xover_tmp.append('1 HI "NNTP.HK"
<ad***@nntp.hk 14 Jun 2006 14:43:05 +0800
<44********@news.nntp.hk 1151 31 Xref:
news.nntp.hk vip.cicefans:1\r\n')
return xover_tmp
def newgroups(self,data,time,gmt):
lists = []
lists.append("cn.test.os")
lists.append("cn.test.qa")
return lists

class Messages(abstract):
banner = '200 \"Welcome to Netkiler News server\"\r\n'
conn= None
def __init__(self):

#self.db=_mysql.connect(host="localhost",user="roo t",passwd="chen",db="usenet")

self.conn=MySQLdb.connect(host="localhost",user="r oot",passwd="chen",db="usenet")
def list (self):
sql = """SELECT id,`group`,(select max(Number) from article) as
last, (select min(Number) from article) as first, p FROM list"""
#print sql
self.conn.query(sql)
result=self.conn.use_result()
group = []
for id, name, last, first, mode, in result.fetch_row(10):
group.append(name+ " " + str(last) + " " + str(first) +" "+
mode)
return group
def group(self,newsgroup):
sql = "SELECT `group`,(select count(Number) from article) as
number, (select max(Number) from article) as last, (select min(Number)
from article) as first FROM list where `group` = '%s' limit 1" %
(newsgroup)
#print sql
self.conn.query(sql)
result=self.conn.use_result()
#print result.fetch_row();
for name, number, last, first in result.fetch_row():
return (str(number),str(first),str(last),name)
def xover(self,first,last):
sql = "select * from article where Number BETWEEN %s AND %s" %
(first,last)
#print sql
cursor =self.conn.cursor()
cursor.execute(sql)
xovers = []
for Number, MessageID, Body, Date in cursor.fetchall():
parse = self.parseArticle(Body)
if 'Xref' in set(parse):
xref = '\t'+parse['Xref']
else:
xref = ''
if 'Lines' in set(parse):
lines = '\t'+parse['Lines']
else:
lines = ''

xovers.append(str(Number)+'\t'+parse['Subject']+'\t'+parse['From']+'\t'+parse['Date']+'\t<3d******@netkiller.hikz.com>\t'+str(len(Body) )+'\t'+lines+xref)
cursor.close ()
return xovers
def post(self,text):
sql = "insert into article(body, `date`) values('%s',now())" %
(text)
#print sql
cursor =self.conn.cursor()
cursor.execute(sql)
self.conn.commit()
cursor.close ()
#self.conn.close ()
#print "%d rows were updated" % cursor.rowcount
return cursor.rowcount
def article(self,id):
sql = "select * from article where Number='%s'" % (id)
#print sql
cursor =self.conn.cursor()
cursor.execute(sql)
#print cursor.fetchone();
row = cursor.fetchone()
# for Number, MessageID, Message, Date in cursor.fetchone():
# cursor.close ()
return row[2]
def head(self,id):
sql = "select * from article where Number='%s'" % (id)
#print sql
cursor =self.conn.cursor()
cursor.execute(sql)
#print cursor.fetchone();
row = cursor.fetchone()
# for Number, MessageID, Message, Date in cursor.fetchone():
# cursor.close ()
return row[2]
def body(self,id):
sql = "select * from article where Number='%s'" % (id)
#print sql
cursor =self.conn.cursor()
cursor.execute(sql)
#print cursor.fetchone();
row = cursor.fetchone()
# for Number, MessageID, Message, Date in cursor.fetchone():
# cursor.close ()
return row[2]
def parseArticle(self,data):
"""
From: "NEO" <op******@163.com>
Newsgroups: cn.test
Subject: test
Date: Fri, 30 Jun 2006 17:14:17 +0800
Lines: 3
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
X-RFC2646: Format=Flowed; Original
"""
#[a-zA-z0-9]+@[a-zA-z0-9]+.[a-zA-z]+
matchs = (
('From', r'From: (.+ <.+>)\r\n'),
('Newsgroups', r'Newsgroups: (.+)\r\n'),
('Subject', r'Subject: (.+)\r\n'),
('Date', r'Date: (.+)\r\n'),
('Lines', r'Lines: (.+)\r\n'),
('X-Priority', r'X-Priority: (.+)\r\n'),
('X-MSMail-Priority', r'X-MSMail-Priority: (.+)\r\n'),
('X-Newsreader', r'X-Newsreader: (.+)\r\n'),
('X-MimeOLE', r'X-MimeOLE: (.+)\r\n'),
('X-RFC2646', r'X-RFC2646: (.+)\r\n'),
('MIME-Version', r'MIME-Version: (.+)\r\n'),
('User-Agent', r'User-Agent: (.+)\r\n'),
('Content-Type', r'Content-Type: (.+)\r\n'),
('Content-Transfer-Encoding', r'Content-Transfer-Encoding:
(.+)\r\n'),
('Xref', r'Xref: (.+)\r\n'),

('Body', r'\r\n\r\n(.+)\r\n')
)
parse = {}
for head, value in matchs:
digs = re.compile(value,re.IGNORECASE)
for test in digs.findall(data):
parse[head] = test
return parse
def main():
test = Messages()
#print msg.banner
#print test.list()
#print test.group('cn.test')
print test.xover('25', '50')
#nntp.post('test')
#delete from article;
#text = test.article('25')
#print repr(text)
#print '---------------------'
#print test.parseArticle(text)
if __name__ == '__main__':
main()

Jul 4 '06 #2

Netkiller 写道:
Netkiller 写道:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Project: Network News Transport Protocol Server Program
Description:
基于数据库的新闻组,实现BBS前端使 NNTP协议来访问贴*


Database SQL Script follow:

-- phpMyAdmin SQL Dump
-- version 2.7.0-rc1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 04, 2006 at 02:47 PM
-- Server version: 4.1.18
-- PHP Version: 5.0.5
--
-- Database: `usenet`
--

-- --------------------------------------------------------

--
-- Table structure for table `article`
--

DROP TABLE IF EXISTS `article`;
CREATE TABLE IF NOT EXISTS `article` (
`Number` int(10) unsigned NOT NULL auto_increment,
`MessageID` varchar(255) NOT NULL default '',
`body` text NOT NULL,
`Date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`Number`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=40 ;

--
-- Dumping data for table `article`
--

INSERT INTO `article` VALUES (25, '', 'From: "NEO"
<op******@163.com>\r\nNewsgroups: cn.test\r\nSubject: test\r\nDate:
Fri, 30 Jun 2006 17:14:17 +0800\r\nLines: 3\r\nX-Priority:
3\r\nX-MSMail-Priority: Normal\r\nX-Newsreader: Microsoft Outlook
Express 6.00.2900.2180\r\nX-MimeOLE: Produced By Microsoft MimeOLE
V6.00.2900.2180\r\nX-RFC2646: Format=Flowed; Original\r\n\r\ntest !
\r\n\r\n\r\n', '2006-06-30 17:14:17');
INSERT INTO `article` VALUES (26, '', 'Date: Tue, 04 Jul 2006 11:34:54
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: aaaaaa\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\n wrote:\r\ntest ! \r\n\r\n\r\n-------------\r\n',
'2006-07-04 11:34:54');
INSERT INTO `article` VALUES (27, '', 'Date: Tue, 04 Jul 2006 13:57:07
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: bbbbbb\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nbbbbbbbbbbb\r\n', '2006-07-04 13:57:07');
INSERT INTO `article` VALUES (28, '', 'Date: Tue, 04 Jul 2006 13:58:17
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: bbbbbb\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nMy Usenet wrote:\r\nbbbbbbbbbbb\r\n', '2006-07-04
13:58:17');
INSERT INTO `article` VALUES (29, '', 'Date: Tue, 04 Jul 2006 14:28:00
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: cccccc\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\ncccccc\r\n', '2006-07-04 14:28:00');
INSERT INTO `article` VALUES (30, '', 'Date: Tue, 04 Jul 2006 14:29:02
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: cccccc My Usenet
<op******@163.com>\r\nContent-Type: text/plain; charset=ISO-8859-1;
format=flowed\r\nContent-Transfer-Encoding: 7bit\r\n\r\nTue wrote:\r\n>
cccccc\r\n', '2006-07-04 14:29:02');
INSERT INTO `article` VALUES (31, '', 'Date: Tue, 04 Jul 2006 14:29:22
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: cccccc My Usenet\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nTue wrote:\r\nTue wrote:\r\n>cccccc\r\n', '2006-07-04
14:29:22');
INSERT INTO `article` VALUES (32, '', 'Date: Tue, 04 Jul 2006 14:29:55
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: ddddd\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nddddd\r\n', '2006-07-04 14:29:55');
INSERT INTO `article` VALUES (33, '', 'Date: Tue, 04 Jul 2006 14:31:32
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: dddddMy Usenet
<op******@163.com>\r\nContent-Type: text/plain; charset=ISO-8859-1;
format=flowed\r\nContent-Transfer-Encoding: 7bit\r\n\r\nTue wrote:\r\n>
ddddd\r\n', '2006-07-04 14:31:32');
INSERT INTO `article` VALUES (34, '', 'Date: Tue, 04 Jul 2006 14:31:45
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: bbbbbb\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nMy Usenet wrote:\r\nbbbbbbbbbbb\r\n', '2006-07-04
14:31:45');
INSERT INTO `article` VALUES (35, '', 'Date: Tue, 04 Jul 2006 14:32:04
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: cccccc\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\ncccccc\r\n', '2006-07-04 14:32:04');
INSERT INTO `article` VALUES (36, '', 'Date: Tue, 04 Jul 2006 14:32:15
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: cccccc\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nMy Usenet wrote:\r\ncccccc\r\n', '2006-07-04 14:32:15');
INSERT INTO `article` VALUES (37, '', 'Date: Tue, 04 Jul 2006 14:32:18
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: cccccc\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nMy Usenet wrote:\r\ncccccc\r\n', '2006-07-04 14:32:18');
INSERT INTO `article` VALUES (38, '', 'Date: Tue, 04 Jul 2006 14:32:26
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: cccccc\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nMy Usenet wrote:\r\ncccccc\r\n', '2006-07-04 14:32:26');
INSERT INTO `article` VALUES (39, '', 'Date: Tue, 04 Jul 2006 14:32:32
+0800\r\nFrom: My Usenet <op******@163.com>\r\nUser-Agent: Thunderbird
1.5.0.4 (Windows/20060516)\r\nMIME-Version: 1.0\r\nNewsgroups:
cn.test\r\nSubject: Re: cccccc\r\nContent-Type: text/plain;
charset=ISO-8859-1; format=flowed\r\nContent-Transfer-Encoding:
7bit\r\n\r\nMy Usenet wrote:\r\ncccccc\r\n', '2006-07-04 14:32:32');

-- --------------------------------------------------------

--
-- Table structure for table `list`
--

DROP TABLE IF EXISTS `list`;
CREATE TABLE IF NOT EXISTS `list` (
`id` int(10) unsigned NOT NULL auto_increment,
`group` varchar(255) NOT NULL default '',
`last` varchar(10) NOT NULL default '',
`first` varchar(10) NOT NULL default '',
`p` char(1) default 'y',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='RFC977 3.6.1. LIST'
AUTO_INCREMENT=3 ;

--
-- Dumping data for table `list`
--

INSERT INTO `list` VALUES (1, 'cn.test', '10', '5', 'y', '0000-00-00
00:00:00');
INSERT INTO `list` VALUES (2, 'cn.comp.os', '10', '5', 'y', '2006-06-27
00:00:00');

Jul 4 '06 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Jan Roland Eriksson | last post by:
Archive-name: www/stylesheets/newsgroup-faq Posting-Frequency: twice a week (mondays and thursdays) Last-modified: March 10, 2001 Version: 1.95 URL: http://css.nu/faq/ciwas-mFAQ.html Maintainer:...
2
by: Jan Roland Eriksson | last post by:
Archive-name: www/stylesheets/newsgroup-faq Posting-Frequency: once a week Last-modified: 2004-07-26 Version: 2.00 URL: <http://css.nu/faq/ciwas-mFAQ.html> Maintainer: Jan Roland Eriksson...
0
by: Jan Roland Eriksson | last post by:
Archive-name: www/stylesheets/newsgroup-faq Posting-Frequency: once a week Last-modified: 2004-07-26 Version: 2.00 URL: <http://css.nu/faq/ciwas-mFAQ.html> Maintainer: Jan Roland Eriksson...
0
by: Jan Roland Eriksson | last post by:
Archive-name: www/stylesheets/newsgroup-faq Posting-Frequency: once a week Last-modified: 2004-07-26 Version: 2.00 URL: <http://css.nu/faq/ciwas-mFAQ.html> Maintainer: Jan Roland Eriksson...
20
by: modemer | last post by:
Question is as in subject. For example: class BaseClass { public: void func() { do something; } // I don't want this function being overloaded in its inherited class };
7
by: Lian | last post by:
Hi every body I have a problem with accesses and visual studio. I've just installed XP and I can't get a connection with the Data base. I have this error and I don't know how to fix it The...
11
by: anongroupaccount | last post by:
What measures should be taken to avoid this sort of thing? class Base { }; class Derived1 : public Base { private: int i, j, k;
4
by: softwaredoug | last post by:
Here is some test code I've been attempting to compile (Visual Studio 2003) test.h: class Base { protected: Base() {} public:
10
by: Alex Snast | last post by:
hello I'm trying to implement a copy constructor for a vector of pointers to a base class (which is abstract) My question is how would i know what kind of new type should i allocate since the...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.