Initial implementation of IHAVE
This commit is contained in:
parent
9450957740
commit
0922a7788b
1 changed files with 43 additions and 0 deletions
|
@ -764,6 +764,48 @@ class Session():
|
|||
except:
|
||||
return self.respond(ResponseCode.NNTP_POST_FAILED)
|
||||
|
||||
def _cmd_ihave(self, message_id):
|
||||
sql = """
|
||||
select
|
||||
count(message_id)
|
||||
from
|
||||
message
|
||||
where
|
||||
message_id = ?
|
||||
"""
|
||||
|
||||
cr = self.db.execute(sql, (message_id,))
|
||||
row = cr.fetchone()
|
||||
|
||||
if row is not None and row[0] > 0:
|
||||
return self.respond(ResponseCode.NNTP_ARTICLE_NOT_WANTED_ID)
|
||||
|
||||
self.respond(ResponseCode.NNTP_INQUIRY_ARTICLE_ID)
|
||||
|
||||
message = Message()
|
||||
|
||||
while True:
|
||||
line = self.readline()
|
||||
|
||||
if line == '':
|
||||
self.active = False
|
||||
break
|
||||
elif line == '.':
|
||||
if message.message_id != message_id:
|
||||
return self.respond(ResponseCode.NNTP_POST_FAILED)
|
||||
|
||||
if self._save_message(message):
|
||||
return self.respond(ResponseCode.NNTP_ARTICLE_RECEIVED_ID)
|
||||
else:
|
||||
return self.respond(ResponseCode.NNTP_POST_FAILED)
|
||||
elif line == '..':
|
||||
line = '.'
|
||||
|
||||
try:
|
||||
message.readline(line)
|
||||
except:
|
||||
return self.respond(ResponseCode.NNTP_POST_FAILED)
|
||||
|
||||
def _cmd_date(self):
|
||||
timestamp = datetime.datetime.now(datetime.UTC)
|
||||
|
||||
|
@ -795,6 +837,7 @@ class Session():
|
|||
'XOVER': _cmd_over,
|
||||
'STAT': _cmd_stat,
|
||||
'POST': _cmd_post,
|
||||
'IHAVE': _cmd_ihave,
|
||||
'DATE': _cmd_date,
|
||||
'QUIT': _cmd_quit,
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue