Initial implementation of IHAVE

This commit is contained in:
XANTRONIX Development 2024-11-30 18:24:47 -05:00
parent 9450957740
commit 0922a7788b

View file

@ -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,
}