@@ -11,6 +11,7 @@ import (
1111
1212 "github.com/gorilla/mux"
1313 "github.com/gosimple/slug"
14+ "github.com/gotd/contrib/http_range"
1415 "golang.org/x/exp/maps"
1516 "gopkg.in/ini.v1"
1617
@@ -83,6 +84,8 @@ type ParsedParts struct {
8384 receiverNick string
8485 senderNick string
8586 serverHostname string
87+ message irc.Message
88+ upstreamSend chan string
8689}
8790
8891func parseSendParams (text string ) * ParsedParts {
@@ -243,6 +246,8 @@ func DCCSend(hook *webircgateway.HookIrcLine) {
243246 parts .receiverNick = client .IrcState .Nick
244247 parts .senderNick = m .Prefix .Nick
245248 parts .serverHostname = client .UpstreamConfig .Hostname
249+ parts .message = * m
250+ parts .upstreamSend = client .UpstreamSend
246251
247252 //TODO when file has no extension PARTS file
248253 lastIndex := strings .LastIndex (parts .file , "." )
@@ -255,8 +260,6 @@ func DCCSend(hook *webircgateway.HookIrcLine) {
255260 hook .Message .Command = "NOTICE"
256261 hook .Message .Params [1 ] = fmt .Sprintf ("http://%s:3000/%s" , configs .DomainName , parts .file )
257262
258-
259-
260263 configs .server .AddFile (parts .file , * parts )
261264
262265 client .SendClientSignal ("data" , hook .Message .ToLine ())
@@ -397,6 +400,28 @@ func (s *Server) InitDispatch() {
397400 // s.ProxyCall(w, r, name)
398401
399402 parts := s .fileNames [name ]
403+ ranges , err := http_range .ParseRange (r .Header .Get ("Range" ), int64 (parts .length ))
404+ if err != nil {
405+ http .Error (w , err .Error (), http .StatusBadRequest )
406+ return
407+ }
408+ if len (ranges ) > 0 {
409+ r := ranges [0 ]
410+ offset := r .Start
411+ w .Header ().Set ("Content-Range" , r .ContentRange (int64 (parts .length )))
412+ w .WriteHeader (http .StatusPartialContent )
413+ passLine := fmt .Sprintf (
414+ "DCC RESUME %s %d %d" ,
415+ parts .file ,
416+ parts .port ,
417+ offset ,
418+ )
419+ parts .message .Params [1 ] = passLine
420+ // message, _ := irc.ParseLine(passLine)
421+ // message.
422+
423+ parts .upstreamSend <- parts .message .ToLine ()
424+ }
400425
401426 //call serveFile here
402427 if serveFile (parts , w , r ) { //removed go keyword this could mean servFile can only happen once
0 commit comments