html create a streaming server.....

Just starting out? Need help? Post your questions and find answers here.
User avatar
CELTIC88
Enthusiast
Enthusiast
Posts: 154
Joined: Thu Sep 17, 2015 3:39 pm

html create a streaming server.....

Post by CELTIC88 »

hi everyone,

I want to create a streaming server For multimedia files run on my pc,but i don't have Knowledge for "html" programming.

Ï did some testing but without success

Someone can fix my code source or change it thank you.

Code: Select all

EnableExplicit

Macro ReceiveNetworkData(sock,Buffer,sizebuffer)
  recv_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro SendNetworkData(sock,Buffer,sizebuffer)
  send_(sock, Buffer, sizebuffer,0) 
EndMacro

Macro aReq(rang,rang2,lenData)
  Ascii("HTTP/1.1 206 OK"  + #CRLF$ +
        "Server: Test"   + #CRLF$ +
        "Connection: Keep-Alive" + #CRLF$ +
        "Accept-Ranges:bytes" + #CRLF$ +; <== https://developer.mozilla.org/fr/docs/Web/HTTP/Headers/Accept-Ranges
        "Content-Range:bytes " + Str(rang) + "-" + Str(lenData-1) +"/" + Str(lenData) + #CRLF$ +
        "Content-Lenght: " + Str(lenData-rang) + #CRLF$ +
        "Content-Type: application/octet-stream" + #CRLF$ + #CRLF$ )
EndMacro

Structure Http_sendFile
  ClientID.i
  ClientSysID.i
  OpenFileId.i
  SizeOffile.q
  Seekpos.q
  *WorkMem
  ConnectionIsClosed.b
EndStructure

Structure listClient
  *iHttp_sendFile.Http_sendFile
EndStructure

Global NewList listClient.listClient()
Global HttServerPort.w = 6832

Procedure Http_sendFile(*iHttp_sendFile.Http_sendFile)
  With *iHttp_sendFile
    Debug "Star snd"
    Protected CourPos.q=\Seekpos,SendSize.l,ReadSize.l
    Repeat
      
      ReadSize = ReadData(\OpenFileId,\WorkMem,1024*10)
      
      Repeat
        If \ConnectionIsClosed = 1
          Debug "disc"
          Break 2
        EndIf
        
        SendSize=SendNetworkData(\ClientSysID,\WorkMem,ReadSize)
        If SendSize > 0
          If SendSize <> ReadSize
            Debug "!!!!!!!!!!!"
            
          EndIf
          Break
        EndIf
      ForEver
      
      CourPos +ReadSize
      
    Until CourPos = \Sizeoffile
    
    Protected *SendReqEnd = Ascii(#CRLF$ + #CRLF$)
    If *SendReqEnd
      If \ConnectionIsClosed = 0
        If SendNetworkData(\ClientSysID,*SendReqEnd,4) < 4
          Debug "Error Send SendReqEnd"
        EndIf
      EndIf
      FreeMemory(*SendReqEnd)
    EndIf
    
    FreeMemory(\WorkMem)
    
    \ConnectionIsClosed = 2
    Debug "End Send File"
  EndWith
EndProcedure


Procedure Http_StartsendFile(*iHttp_sendFile.Http_sendFile,File.s)
  With *iHttp_sendFile
    \WorkMem = AllocateMemory(1024*10)
    If Not \WorkMem
      ProcedureReturn 0
    EndIf
    ReceiveNetworkData(\ClientSysID, \WorkMem, 1024*10)
    Protected GetReq.s = PeekS(\WorkMem, -1, #PB_UTF8)
    If GetReq = #Null$
      ProcedureReturn 0
    EndIf
    FillMemory(\WorkMem,1024*10)
    MessageRequester("Get Request",GetReq)
    
    Protected GetRange.s = Mid(GetReq,FindString(GetReq,"Range: bytes=")+Len("Range: bytes="))
    GetRange = Mid(GetRange,0,FindString(GetRange,"-")-1)
    Protected Range.q = Val(GetRange) 
    \Seekpos = Range
    Debug "Range = " +GetRange
    
    \SizeOffile = FileSize(File) 
    If \Sizeoffile < 1
      Debug "File not Exist"
      ProcedureReturn 0
    EndIf
    
    \OpenFileId= ReadFile(#PB_Any,File)
    If \OpenFileId =0
      ProcedureReturn 0
    EndIf
    FileSeek( \OpenFileId,\Seekpos)
    
    Debug "Size Of File = " + Str(\Sizeoffile)
    
    Protected *SendReq = aReq(Range,0,\SizeOffile)
    If *SendReq
      Protected reqz.l=MemorySize(*SendReq)
      If SendNetworkData(\ClientSysID,*SendReq,reqz) <> reqz
        FreeMemory(*SendReq)
        ProcedureReturn 0
      EndIf
      FreeMemory(*SendReq)
    Else
      ProcedureReturn 0
    EndIf
    
    If CreateThread(@Http_sendFile(),*iHttp_sendFile)
      ProcedureReturn 1
    Else
      ProcedureReturn 0
    EndIf
  EndWith
EndProcedure

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf


If CreateNetworkServer(0, HttServerPort)
  
  Global SelecFile.s = OpenFileRequester("Select a file...","","music|*.mp3|Video|*.avi;*.asf",0)
  If SelecFile = #Null$
    End
    ;     SelecFile="test.mp3"
  EndIf
  
  MessageRequester("Hi " + UserName(),"Your Streaming Link : "+ #CRLF$ +  #CRLF$ + 
                                      "http://127.0.0.1: " + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Or " + #CRLF$ + 
                                      "http://Your external Ip: " + Str(HttServerPort)+ "/Noting" + #CRLF$ + 
                                      "Click Ok To Start" )
  
  Define SEvent,ClientID,*iHttp_sendFile.Http_sendFile
  
  Repeat
    Delay(10)
    
    ForEach listClient()
      If listClient()\iHttp_sendFile\ConnectionIsClosed = 2
        FreeMemory(listClient()\iHttp_sendFile)
        DeleteElement(listClient())
      EndIf
    Next
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      
      ClientID = EventClient()
      
      Select SEvent
          
        Case #PB_NetworkEvent_Connect
          
        Case #PB_NetworkEvent_Data
          *iHttp_sendFile = AllocateMemory(SizeOf(Http_sendFile))
          If *iHttp_sendFile
            With *iHttp_sendFile
              \ClientSysID = ConnectionID(ClientID)
              \ClientID = ClientID
              If Http_StartsendFile(*iHttp_sendFile,SelecFile) =1
                AddElement(listClient())
                listClient()\iHttp_sendFile=*iHttp_sendFile
              Else
                If \WorkMem
                  FreeMemory(\WorkMem)
                EndIf
                CloseNetworkConnection(ClientID)
              EndIf
            EndWith
          Else
            CloseNetworkConnection(ClientID)
          EndIf
          
        Case #PB_NetworkEvent_Disconnect
          ForEach listClient()
            If ClientID = listClient()\iHttp_sendFile\ClientID
              listClient()\iHttp_sendFile\ConnectionIsClosed=1
              Break
            EndIf
          Next
          
      EndSelect
    EndIf
    
  ForEver
  
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
interested in Cybersecurity..