473,397 Members | 1,969 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,397 software developers and data experts.

SIP Proxy Server Help

Good day every one,
i just try to develop a sip proxy with mjsip's library,
now i am facing problem,
1st, the client is connected to proxy,
but it can make call (VoIP) to another client,
the client i using to test is the window messenger 5.1 (with sip support).

anybody can help me look on the code and try to tell me what is going wrong pls..

the packet of the client send to proxy just stop at the updateProxingResponse method then the client directly shows the connection has be declined by another user. i wonder what is happening.

Please somebody help..it's urgent for my assignment

cause the code it's quite long, so someone that willing to help me please give me ur email then i will send it to u, just 1 page of source code. Thanks.

after that we discuss it here.
Mar 20 '07 #1
8 2146
r035198x
13,262 8TB
Good day every one,
i just try to develop a sip proxy with mjsip's library,
now i am facing problem,
1st, the client is connected to proxy,
but it can make call (VoIP) to another client,
the client i using to test is the window messenger 5.1 (with sip support).

anybody can help me look on the code and try to tell me what is going wrong pls..

the packet of the client send to proxy just stop at the updateProxingResponse method then the client directly shows the connection has be declined by another user. i wonder what is happening.

Please somebody help..it's urgent for my assignment

cause the code it's quite long, so someone that willing to help me please give me ur email then i will send it to u, just 1 page of source code. Thanks.

after that we discuss it here.
Is the updateProxingResponse method too long as well? If not you can just post that here.
Mar 20 '07 #2
protected Message updateProxingResponse(Message resp)
{ printLog("inside updateProxingResponse(resp)",LogLevel.MEDIUM);
System.out.println("header for response");
ViaHeader vh=new ViaHeader((Header)resp.getVias().getHeaders().elem entAt(0));
if (vh.getHost().equals(sip_provider.getViaAddress()) ) resp.removeViaHeader();
return resp;
}


actually it's can function well before i implements TransactionClientListener with the proxy.

here i paste the updateProxingResponse method, the code actually is about 400 lines, is it ok to paste it all here?

thanks for ur reply.
Mar 20 '07 #3
r035198x
13,262 8TB
protected Message updateProxingResponse(Message resp)
{ printLog("inside updateProxingResponse(resp)",LogLevel.MEDIUM);
System.out.println("header for response");
ViaHeader vh=new ViaHeader((Header)resp.getVias().getHeaders().elem entAt(0));
if (vh.getHost().equals(sip_provider.getViaAddress()) ) resp.removeViaHeader();
return resp;
}


actually it's can function well before i implements TransactionClientListener with the proxy.

here i paste the updateProxingResponse method, the code actually is about 400 lines, is it ok to paste it all here?

thanks for ur reply.
I don't think that will help much yet. Can you describe a bit what happens when you run it.
Mar 20 '07 #4
ok,
i try to track the flow when i connect with the client and try to call another client.

what i get is,

1st it go to the processRequestToLocalUser method and then make a SipURL url=new SipURL((String)(targets.elementAt(i))); object.

2nd it go to the header part, updateProxingRequest method, and then go through it and add Record-Route then add ViaHeader.

3rd it suddenly jump back to the processRequestToRemoteUA method that i wonder why it go to that method, after that it go to the header part again,

lastly, it stop at the add ViaHeader part there, then stop.
then the other side's client didn't get any call from the client1 that calling,
then the client1 will show that request is decline by client2.

it seems it never go to the ProcessResponse method and updateProxingResponse method at all.
(when delete the processRequestToRemoteUA method, it will go to the ProcessResponse method and then to the updateProxingResponse method ...then stop right there).

if i no delete the processRequestToRemoteUA method, it will just stop at the add viaheader part.

is it blur from my explanation?
if still can't imagine, i wish to send you the page of code so that you can try to help me more effectively.

Thanks.
Mar 20 '07 #5
it feels like stuck at middle cause by some part of the coding,
i try so hard to debug it,
but still can't get it.
Mar 20 '07 #6
Expand|Select|Wrap|Line Numbers
  1. public class Proxy extends Registrar implements TransactionClientListener
  2. {
  3.    /** Log of processed calls */
  4.    CallLogger call_logger;
  5.  
  6.        /** Transactions state */
  7.        protected StatefulProxyState state=null;
  8.  
  9.       /** SipProvider for client transactions */
  10.       protected SipProvider sip_provider_client;
  11.  
  12.       /** SipProvider for server transactions */
  13.       protected SipProvider sip_provider_server;
  14.  
  15.       /** Inits the stateful server */
  16.       private void init()
  17.       {  sip_provider_client=sip_provider;
  18.          sip_provider_server=sip_provider;
  19.          state=new StatefulProxyState();
  20.    }
  21.  
  22.    /** Costructs a void Proxy */
  23.    protected Proxy() {}
  24.  
  25.    /** Costructs a new Proxy that acts also as location server for registered users. */
  26.    public Proxy(SipProvider provider, ServerProfile server_profile)
  27.    {  super(provider,server_profile);
  28.            init();
  29.            System.out.println("Constructed");
  30.       if (server_profile.call_log) call_logger=new CallLoggerImpl(SipStack.log_path+"//"+provider.getViaAddress()+"."+provider.getPort()+"_calls.log");
  31.    }
  32.  
  33.  
  34.    /** When a new request is received for the local server. */
  35.    public void processRequestToLocalServer(Message msg)
  36.    {  printLog("inside processRequestToLocalServer(msg)",LogLevel.MEDIUM);
  37.       if (msg.isRegister())
  38.       {  super.processRequestToLocalServer(msg);
  39.       System.out.println("isRegister(localserver)");
  40.       }
  41.       else
  42.       if (!msg.isAck())
  43.       {  // send a stateless error response
  44.          //int result=501; // response code 501 ("Not Implemented")
  45.          //int result=485; // response code 485 ("Ambiguous");
  46.          int result=484; // response code 484 ("Address Incomplete");
  47.          Message resp=MessageFactory.createResponse(msg,result,SipResponses.reasonOf(result),null);
  48.          sip_provider.sendMessage(resp);
  49.       }
  50.    }
  51.  
  52.  
  53.    /** When a new request message is received for a local user */
  54.    public void processRequestToLocalUser(Message msg)
  55.    {  printLog("inside processRequestToLocalUser(msg)",LogLevel.MEDIUM);
  56.  
  57.       if (server_profile.call_log) call_logger.update(msg);
  58.  
  59.       if (server_profile.do_proxy_authentication && !msg.isAck() && !msg.isCancel())
  60.       {  // check message authentication
  61.          Message err_resp=as.authenticateProxyRequest(msg);
  62.          if (err_resp!=null)
  63.          {  sip_provider.sendMessage(err_resp);
  64.          System.out.println("localuser");
  65.             return;
  66.          }
  67.       }
  68.  
  69.        TransactionServer ts;
  70.             if (msg.isInvite()) ts=new InviteTransactionServer(sip_provider_server,msg,null);
  71.             else ts=new TransactionServer(sip_provider_server,msg,null);
  72.             //ts.listen();
  73.  
  74.             if (server_profile.do_proxy_authentication && !msg.isAck() && !msg.isCancel())
  75.             {  // check message authentication
  76.                Message err_resp=as.authenticateProxyRequest(msg);
  77.                System.out.println("StfulltransactionServer");
  78.                if (err_resp!=null)
  79.                {  ts.respondWith(err_resp);
  80.                   return;
  81.                }
  82.             }
  83.  
  84.  
  85.       // message targets
  86.       Vector targets=getTargets(msg);
  87.  
  88.       if (targets.isEmpty())
  89.       {
  90.          SipURL request_uri=msg.getRequestLine().getAddress();
  91.          System.out.println("request_uri");
  92.       }
  93.       if (targets.isEmpty())
  94.       {  printLog("No target found, message discarded",LogLevel.HIGH);
  95.          if (!msg.isAck()) sip_provider.sendMessage(MessageFactory.createResponse(msg,404,SipResponses.reasonOf(404),null));
  96.          return;
  97.       }
  98.  
  99.       printLog("message will be forwarded to all user's contacts",LogLevel.MEDIUM);
  100.       for (int i=0; i<targets.size(); i++)
  101.       {  SipURL url=new SipURL((String)(targets.elementAt(i)));
  102.       System.out.println("SIPURL");
  103.          Message request=new Message(msg);
  104.          request.removeRequestLine();
  105.          request.setRequestLine(new RequestLine(msg.getRequestLine().getMethod(),url));
  106.  
  107.          updateProxingRequest(request);
  108.          sip_provider.sendMessage(request);
  109.          TransactionClient tc;
  110.          if (msg.isInvite()) tc=new InviteTransactionClient(sip_provider_client,request,this);
  111.          else tc=new TransactionClient(sip_provider_client,request,this);
  112.          state.addClient(ts,tc);
  113.       }
  114.    }
  115.  
  116.  
  117.   // When a new request message is received for a remote UA
  118.      public void processRequestToRemoteUA(Message msg)
  119.      {  printLog("inside processRequestToRemoteUA(msg)",LogLevel.MEDIUM);
  120.       System.out.println("request remote UA");
  121.  
  122.         if (call_logger!=null) call_logger.update(msg);
  123.  
  124.         if (!server_profile.is_open_proxy)
  125.         {  // check whether the caller is a local user
  126.            SipURL from_url=msg.getFromHeader().getNameAddress().getAddress();
  127.            String from_username=from_url.getUserName();
  128.            String from_hostaddr=from_url.getHost();
  129.            String caller=(from_username==null)? from_hostaddr : from_username+"@"+from_hostaddr;
  130.            if (!location_service.hasUser(caller))
  131.            {  // but do not filter messages directed to local users
  132.               SipURL to_url=msg.getToHeader().getNameAddress().getAddress();
  133.               String to_username=to_url.getUserName();
  134.               String to_hostaddr=to_url.getHost();
  135.               String callee=(to_username==null)? to_hostaddr : to_username+"@"+to_hostaddr;
  136.               if (!location_service.hasUser(callee))
  137.               {  // both caller and callee are not registered with the local server
  138.                  printLog("both users "+caller+" and "+callee+" are not registered with the local server: proxy denied.",LogLevel.HIGH);
  139.                  sip_provider.sendMessage(MessageFactory.createResponse(msg,503,SipResponses.reasonOf(503),null));
  140.                  return;
  141.               }
  142.            }
  143.         }
  144.  
  145.         if (server_profile.do_proxy_authentication && !msg.isAck() && !msg.isCancel())
  146.         {  // check message authentication
  147.            Message err_resp=as.authenticateProxyRequest(msg);
  148.            if (err_resp!=null)
  149.            {  sip_provider.sendMessage(err_resp);
  150.               return;
  151.            }
  152.         }
  153.  
  154.         updateProxingRequest(msg);
  155.         sip_provider.sendMessage(msg);
  156.    }
  157.  
  158.    /** Processes the Proxy headers of the request.
  159.      * Such headers are: Via, Record-Route, Route, Max-Forwards, etc. */
  160.    protected Message updateProxingRequest(Message msg)
  161.    {  printLog("inside updateProxingRequest(msg)",LogLevel.LOW);
  162.         System.out.println("header part1");
  163.       // remove Route if present
  164.       boolean is_on_route=false;
  165.       if (msg.hasRouteHeader())
  166.       {  MultipleHeader mr=msg.getRoutes();
  167.       System.out.println("X route");
  168.          SipURL route=(new RouteHeader(mr.getTop())).getNameAddress().getAddress();
  169.          if (isResponsibleFor(route.getHost(),route.getPort()))
  170.          {  mr.removeTop();
  171.             if (mr.size()>0) msg.setRoutes(mr);
  172.             else msg.removeRoutes();
  173.             is_on_route=true;
  174.          }
  175.       }
  176.       // add Record-Route?
  177.       if (server_profile.on_route && msg.isInvite() && !is_on_route)
  178.       {  SipURL rr_url;
  179.           System.out.println("+ route");
  180.          if (sip_provider.getPort()==SipStack.default_port) rr_url=new SipURL(sip_provider.getViaAddress());
  181.          else rr_url=new SipURL(sip_provider.getViaAddress(),sip_provider.getPort());
  182.          if (server_profile.loose_route) rr_url.addLr();
  183.          RecordRouteHeader rrh=new RecordRouteHeader(new NameAddress(rr_url));
  184.          msg.addRecordRouteHeader(rrh);
  185.       }
  186.       // which protocol?
  187.       String proto=null;
  188.       if (msg.hasRouteHeader())
  189.       {  SipURL route=msg.getRouteHeader().getNameAddress().getAddress();
  190.       System.out.println("protocol");
  191.          if (route.hasTransport()) proto=route.getTransport();
  192.       }
  193.       else proto=msg.getRequestLine().getAddress().getTransport();
  194.       if (proto==null) proto=sip_provider.getDefaultTransport();
  195.  
  196.        // add Via
  197.             ViaHeader via=new ViaHeader(proto,sip_provider.getViaAddress(),sip_provider.getPort());
  198.             if (sip_provider.isRportSet()) via.setRport();
  199.             String branch=sip_provider.pickBranch(msg);
  200.             System.out.println("VIA");
  201.  
  202.             if (server_profile.loop_detection)
  203.             {  String loop_tag=msg.getHeader(Loop_Tag).getValue();
  204.                if (loop_tag!=null)
  205.                {  msg.removeHeader(Loop_Tag);
  206.                   branch+=loop_tag;
  207.                }
  208.             }
  209.             via.setBranch(branch);
  210.             msg.addViaHeader(via);
  211.  
  212.             // decrement Max-Forwards
  213.             MaxForwardsHeader maxfwd=msg.getMaxForwardsHeader();
  214.             if (maxfwd!=null) maxfwd.decrement();
  215.             else maxfwd=new MaxForwardsHeader(SipStack.max_forwards);
  216.             msg.setMaxForwardsHeader(maxfwd);
  217.  
  218.             // domain name routing
  219.             if (server_profile.domain_routing_rules!=null && server_profile.domain_routing_rules.length>0)
  220.             {  RequestLine rl=msg.getRequestLine();
  221.             System.out.println("domain routing");
  222.  
  223.                SipURL request_uri=rl.getAddress();
  224.                for (int i=0; i<server_profile.domain_routing_rules.length; i++)
  225.                {  RoutingRule rule=(RoutingRule)server_profile.domain_routing_rules[i];
  226.                   SipURL nexthop=rule.getNexthop(request_uri);
  227.                   if (nexthop!=null)
  228.                   {  printLog("domain-based routing: "+rule.toString()+": YES",LogLevel.MEDIUM);
  229.                      printLog("target="+nexthop.toString(),LogLevel.MEDIUM);
  230.                      rl=new RequestLine(rl.getMethod(),nexthop);
  231.                      msg.setRequestLine(rl);
  232.                      break;
  233.                   }
  234.                   else printLog("prefix-based routing: "+rule.toString()+": NO",LogLevel.MEDIUM);
  235.                }
  236.             }
  237.             return msg;
  238.  }
  239.  
Mar 20 '07 #7
continue here... sorry it's so long, hope you won't mind.

Expand|Select|Wrap|Line Numbers
  1.    /** When a new response message is received */
  2.    public void processResponse(Message resp)
  3.    {  printLog("inside processResponse(msg)",LogLevel.MEDIUM);
  4.         System.out.println("response message");
  5.       if(call_logger!=null) call_logger.update(resp);
  6.  
  7.       updateProxingResponse(resp);
  8.  
  9.       if (resp.hasViaHeader()) sip_provider.sendMessage(resp);
  10.       else
  11.          printLog("no VIA header found: message discarded",LogLevel.HIGH);
  12.    }
  13.  
  14.      /** Sends a server final response */
  15.        protected void statefulServerResponse(TransactionServer ts, Message resp)
  16.        {  printLog("inside statefulServerResponse(msg)",LogLevel.MEDIUM);
  17.        System.out.println("send to server final response");
  18.           printLog("Server response: "+resp.getStatusLine().toString(),LogLevel.MEDIUM);
  19.           ts.respondWith(resp);
  20.        }
  21.  
  22.        /** Process provisional response */
  23.        protected void processProvisionalResponse(Transaction transaction, Message resp)
  24.        {  printLog("inside processProvisionalResponse(t,resp)",LogLevel.MEDIUM);
  25.        System.out.println("Cprovisional response");
  26.           int code=resp.getStatusLine().getCode();
  27.           TransactionServer ts=state.getServer(transaction);
  28.           if (ts!=null && code!=100)
  29.           {  updateProxingResponse(resp);
  30.              if (resp.hasViaHeader()) ts.respondWith(resp);
  31.           }
  32.        }
  33.  
  34.        /** Process failure response */
  35.        protected void processFailureResponse(Transaction transaction, Message resp)
  36.        {  printLog("inside processFailureResponse(t,resp)",LogLevel.MEDIUM);
  37.        System.out.println("failured response");
  38.           TransactionServer ts=state.getServer(transaction);
  39.           state.removeClient(transaction);
  40.           if (ts==null) return;
  41.           if (!state.hasServer(ts)) return;
  42.           // updates the non-2xx final response
  43.           state.setFinalResponse(ts,resp);
  44.           // if there are no more pending clients, sends the final response
  45.           HashSet clients=state.getClients(ts);
  46.           if (clients.isEmpty())
  47.           {  printLog("only this tr_client remained: send the response",LogLevel.LOW);
  48.              resp=state.getFinalResponse(ts);
  49.              updateProxingResponse(resp);
  50.              if (resp.hasViaHeader()) ts.respondWith(resp);
  51.              state.removeServer(ts);
  52.           }
  53.        }
  54.  
  55.        /** Process success response */
  56.        protected void processSuccessResponse(Transaction transaction, Message resp)
  57.        {  printLog("inside processSuccessResponse(t,resp)",LogLevel.MEDIUM);
  58.        System.out.println("Success response");
  59.           TransactionServer ts=state.getServer(transaction);
  60.           state.removeClient(transaction);
  61.           if (ts==null) return;
  62.           updateProxingResponse(resp);
  63.           if (resp.hasViaHeader())
  64.           {  ts.respondWith(resp);
  65.              if (!state.hasServer(ts)) return;
  66.              //else
  67.              // cancel all other pending transaction clients
  68.              HashSet clients=state.getClients(ts);
  69.              //printLog("Cancel pending clients..",LogLevel.LOW);
  70.              //if (clients==null) return;
  71.              printLog("Cancelling "+clients.size()+" pending clients",LogLevel.LOW);
  72.              for (Iterator i=clients.iterator(); i.hasNext(); )
  73.              {  Transaction tc=(Transaction)i.next();
  74.                 Message cancel=MessageFactory.createCancelRequest(tc.getRequestMessage());
  75.                 TransactionClient tr_cancel=new TransactionClient(sip_provider_server,cancel,null);
  76.                 tr_cancel.request();
  77.              }
  78.              state.removeServer(ts);
  79.           }
  80.        }
  81.  
  82.  
  83.        /** Process timeout */
  84.        protected void processTimeout(Transaction transaction)
  85.        {  printLog("inside processTimeout(t)",LogLevel.MEDIUM);
  86.        System.out.println("Time out processing");
  87.           TransactionServer ts=state.getServer(transaction);
  88.           state.removeClient(transaction);
  89.           if (ts==null) return;
  90.           HashSet clients=(HashSet)state.getClients(ts);
  91.           if (clients==null) return;
  92.           if (clients.isEmpty())
  93.           {  printLog("DEBUG: responding..",LogLevel.LOW);
  94.              //printLog("DEBUG:\r\n"+state.getFinalResponse(ts),LogLevel.LOW);
  95.              Message resp=state.getFinalResponse(ts);
  96.              updateProxingResponse(resp);
  97.              if (resp.hasViaHeader()) statefulServerResponse(ts,resp);
  98.              state.removeServer(ts);
  99.           }
  100.    }
  101.  
  102.    /** Processes the Proxy headers of the response.
  103.      * Such headers are: Via, .. */
  104.    protected Message updateProxingResponse(Message resp)
  105.    {  printLog("inside updateProxingResponse(resp)",LogLevel.MEDIUM);
  106.    System.out.println("header for response");
  107.       ViaHeader vh=new ViaHeader((Header)resp.getVias().getHeaders().elementAt(0));
  108.       if (vh.getHost().equals(sip_provider.getViaAddress())) resp.removeViaHeader();
  109.       return resp;
  110.    }
  111.  
  112.  
  113.     // ******************* TransactionClient callback methods *******************
  114.  
  115.       /** When the TransactionClient is in "Proceeding" state and receives a new 1xx response */
  116.       public void onTransProvisionalResponse(TransactionClient transaction, Message resp)
  117.       {  processProvisionalResponse(transaction,resp);
  118.       }
  119.  
  120.       /** When the TransactionClient goes into the "Completed" state, receiving a failure response */
  121.       public void onTransFailureResponse(TransactionClient transaction, Message resp)
  122.       {  processFailureResponse(transaction,resp);
  123.       }
  124.  
  125.       /** When an TransactionClient goes into the "Terminated" state, receiving a 2xx response */
  126.       public void onTransSuccessResponse(TransactionClient transaction, Message resp)
  127.       {  processSuccessResponse(transaction,resp);
  128.       }
  129.  
  130.       /** When the TransactionClient goes into the "Terminated" state, caused by transaction timeout */
  131.       public void onTransTimeout(TransactionClient transaction)
  132.       {  processTimeout(transaction);
  133.    }
  134.  
  135.    // ****************************** Logs *****************************
  136.  
  137.    /** Adds a new string to the default Log */
  138.    private void printLog(String str, int level)
  139.    {  if (log!=null)
  140.    {
  141.        log.println("StatefulProxy: "+str,level+SipStack.LOG_LEVEL_UA);
  142.        log.println("Proxy: "+str,level+SipStack.LOG_LEVEL_UA);
  143.    }
  144.    }
  145.  
  146.  
  147.    // ****************************** MAIN *****************************
  148.  
  149.    /** The main method. */
  150.    public static void main(String[] args)
  151.    {
  152.  
  153.       String file=null;
  154.       boolean prompt_exit=false;
  155.  
  156.       for (int i=0; i<args.length; i++)
  157.       {  if (args[i].equals("-f") && args.length>(i+1))
  158.          {  file=args[++i];
  159.             continue;
  160.          }
  161.       }
  162.  
  163.       SipStack.init(file);
  164.       SipProvider sip_provider=new SipProvider(file);
  165.       ServerProfile server_profile=new ServerProfile(file);
  166.  
  167.       System.out.println("Start");
  168.  
  169.       new Proxy(sip_provider,server_profile);
  170.  
  171.       System.out.println("Connected");
  172.  
  173.    }
  174.  
  175. }
  176.  
Thanks for ur help..
Mar 20 '07 #8
Anybody?
Please try to help me.
Mar 22 '07 #9

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: b_prikls | last post by:
Hi all, i need your help, here is code, that makes http connection to a website throu a proxy server, and it works fine: ========================================== $proxy = "111.111.111.111";...
6
by: harry | last post by:
Hi, I have a program that runs on multiple client pc's. Occasionally one or more of those pc's use VPN to connect to another corporate network. When using VPN they need to set proxy server in...
0
by: PeterJ | last post by:
I created some web pages in Visual Studio 2003 in VB and sent them to another fellow to be rolled up into an application. This was sent back to me and I could not open the whole application. Now...
4
by: WATYF1 | last post by:
Hello. I'm writing a VB.NET app to check email message counts for both POP3 and IMAP4. I'm using TCPClient to connect, and a NetworkStream to send simple commands. It's a very simple bit of code,...
9
by: Codex Twin | last post by:
I am re-sending this in the hope that it might illicit a response. I have a corporate client who forces their workstations to get the proxy server details using an automatic proxy discovery script....
1
by: Steve.Goodman | last post by:
Appologies if this has already been asked, but after scanning the web and this news group I could find no decent solution. We have a windows App that calls a webservice, using this bit of basic...
7
by: Pro1712 | last post by:
Hello, I need to write a simple proxy server. What I want to do is to use HttpListener to get requests from the browser, add some proxy information and some other stuff and send the request to...
3
by: Joseph Geretz | last post by:
System.InvalidOperationException: WebServiceBindingAttribute is required on proxy classes. My environment: Visual Studio 2005, targeting FX 2.0; I've developed a Web Service which uses DIME to...
7
by: chandru1782 | last post by:
Dear friends, I am trying to use CPAN for installing some perl modules. i am using a ubuntu system, which has internet connection through lan and authenticated proxy. when trying to install...
1
by: =?Utf-8?B?Z2FsbGFu?= | last post by:
We have an application that is running fine on several of our customer’s servers. However, one of our customers is having a problem running the application. The application works on one of his...
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: 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
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
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,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

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.