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 updateProxingRe sponse 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.
8 2162
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 updateProxingRe sponse 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 updateProxingRe sponse method too long as well? If not you can just post that here.
protected Message updateProxingRe sponse(Message resp)
{ printLog("insid e updateProxingRe sponse(resp)",L ogLevel.MEDIUM) ;
System.out.prin tln("header for response");
ViaHeader vh=new ViaHeader((Head er)resp.getVias ().getHeaders() .elementAt(0));
if (vh.getHost().e quals(sip_provi der.getViaAddre ss())) resp.removeViaH eader();
return resp;
}
actually it's can function well before i implements TransactionClie ntListener with the proxy.
here i paste the updateProxingRe sponse method, the code actually is about 400 lines, is it ok to paste it all here?
thanks for ur reply.
protected Message updateProxingRe sponse(Message resp)
{ printLog("insid e updateProxingRe sponse(resp)",L ogLevel.MEDIUM) ;
System.out.prin tln("header for response");
ViaHeader vh=new ViaHeader((Head er)resp.getVias ().getHeaders() .elementAt(0));
if (vh.getHost().e quals(sip_provi der.getViaAddre ss())) resp.removeViaH eader();
return resp;
}
actually it's can function well before i implements TransactionClie ntListener with the proxy.
here i paste the updateProxingRe sponse 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.
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 processRequestT oLocalUser method and then make a SipURL url=new SipURL((String) (targets.elemen tAt(i))); object.
2nd it go to the header part, updateProxingRe quest method, and then go through it and add Record-Route then add ViaHeader.
3rd it suddenly jump back to the processRequestT oRemoteUA 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 updateProxingRe sponse method at all. (when delete the processRequestT oRemoteUA method, it will go to the ProcessResponse method and then to the updateProxingRe sponse method ...then stop right there).
if i no delete the processRequestT oRemoteUA 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.
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.
-
public class Proxy extends Registrar implements TransactionClientListener
-
{
-
/** Log of processed calls */
-
CallLogger call_logger;
-
-
/** Transactions state */
-
protected StatefulProxyState state=null;
-
-
/** SipProvider for client transactions */
-
protected SipProvider sip_provider_client;
-
-
/** SipProvider for server transactions */
-
protected SipProvider sip_provider_server;
-
-
/** Inits the stateful server */
-
private void init()
-
{ sip_provider_client=sip_provider;
-
sip_provider_server=sip_provider;
-
state=new StatefulProxyState();
-
}
-
-
/** Costructs a void Proxy */
-
protected Proxy() {}
-
-
/** Costructs a new Proxy that acts also as location server for registered users. */
-
public Proxy(SipProvider provider, ServerProfile server_profile)
-
{ super(provider,server_profile);
-
init();
-
System.out.println("Constructed");
-
if (server_profile.call_log) call_logger=new CallLoggerImpl(SipStack.log_path+"//"+provider.getViaAddress()+"."+provider.getPort()+"_calls.log");
-
}
-
-
-
/** When a new request is received for the local server. */
-
public void processRequestToLocalServer(Message msg)
-
{ printLog("inside processRequestToLocalServer(msg)",LogLevel.MEDIUM);
-
if (msg.isRegister())
-
{ super.processRequestToLocalServer(msg);
-
System.out.println("isRegister(localserver)");
-
}
-
else
-
if (!msg.isAck())
-
{ // send a stateless error response
-
//int result=501; // response code 501 ("Not Implemented")
-
//int result=485; // response code 485 ("Ambiguous");
-
int result=484; // response code 484 ("Address Incomplete");
-
Message resp=MessageFactory.createResponse(msg,result,SipResponses.reasonOf(result),null);
-
sip_provider.sendMessage(resp);
-
}
-
}
-
-
-
/** When a new request message is received for a local user */
-
public void processRequestToLocalUser(Message msg)
-
{ printLog("inside processRequestToLocalUser(msg)",LogLevel.MEDIUM);
-
-
if (server_profile.call_log) call_logger.update(msg);
-
-
if (server_profile.do_proxy_authentication && !msg.isAck() && !msg.isCancel())
-
{ // check message authentication
-
Message err_resp=as.authenticateProxyRequest(msg);
-
if (err_resp!=null)
-
{ sip_provider.sendMessage(err_resp);
-
System.out.println("localuser");
-
return;
-
}
-
}
-
-
TransactionServer ts;
-
if (msg.isInvite()) ts=new InviteTransactionServer(sip_provider_server,msg,null);
-
else ts=new TransactionServer(sip_provider_server,msg,null);
-
//ts.listen();
-
-
if (server_profile.do_proxy_authentication && !msg.isAck() && !msg.isCancel())
-
{ // check message authentication
-
Message err_resp=as.authenticateProxyRequest(msg);
-
System.out.println("StfulltransactionServer");
-
if (err_resp!=null)
-
{ ts.respondWith(err_resp);
-
return;
-
}
-
}
-
-
-
// message targets
-
Vector targets=getTargets(msg);
-
-
if (targets.isEmpty())
-
{
-
SipURL request_uri=msg.getRequestLine().getAddress();
-
System.out.println("request_uri");
-
}
-
if (targets.isEmpty())
-
{ printLog("No target found, message discarded",LogLevel.HIGH);
-
if (!msg.isAck()) sip_provider.sendMessage(MessageFactory.createResponse(msg,404,SipResponses.reasonOf(404),null));
-
return;
-
}
-
-
printLog("message will be forwarded to all user's contacts",LogLevel.MEDIUM);
-
for (int i=0; i<targets.size(); i++)
-
{ SipURL url=new SipURL((String)(targets.elementAt(i)));
-
System.out.println("SIPURL");
-
Message request=new Message(msg);
-
request.removeRequestLine();
-
request.setRequestLine(new RequestLine(msg.getRequestLine().getMethod(),url));
-
-
updateProxingRequest(request);
-
sip_provider.sendMessage(request);
-
TransactionClient tc;
-
if (msg.isInvite()) tc=new InviteTransactionClient(sip_provider_client,request,this);
-
else tc=new TransactionClient(sip_provider_client,request,this);
-
state.addClient(ts,tc);
-
}
-
}
-
-
-
// When a new request message is received for a remote UA
-
public void processRequestToRemoteUA(Message msg)
-
{ printLog("inside processRequestToRemoteUA(msg)",LogLevel.MEDIUM);
-
System.out.println("request remote UA");
-
-
if (call_logger!=null) call_logger.update(msg);
-
-
if (!server_profile.is_open_proxy)
-
{ // check whether the caller is a local user
-
SipURL from_url=msg.getFromHeader().getNameAddress().getAddress();
-
String from_username=from_url.getUserName();
-
String from_hostaddr=from_url.getHost();
-
String caller=(from_username==null)? from_hostaddr : from_username+"@"+from_hostaddr;
-
if (!location_service.hasUser(caller))
-
{ // but do not filter messages directed to local users
-
SipURL to_url=msg.getToHeader().getNameAddress().getAddress();
-
String to_username=to_url.getUserName();
-
String to_hostaddr=to_url.getHost();
-
String callee=(to_username==null)? to_hostaddr : to_username+"@"+to_hostaddr;
-
if (!location_service.hasUser(callee))
-
{ // both caller and callee are not registered with the local server
-
printLog("both users "+caller+" and "+callee+" are not registered with the local server: proxy denied.",LogLevel.HIGH);
-
sip_provider.sendMessage(MessageFactory.createResponse(msg,503,SipResponses.reasonOf(503),null));
-
return;
-
}
-
}
-
}
-
-
if (server_profile.do_proxy_authentication && !msg.isAck() && !msg.isCancel())
-
{ // check message authentication
-
Message err_resp=as.authenticateProxyRequest(msg);
-
if (err_resp!=null)
-
{ sip_provider.sendMessage(err_resp);
-
return;
-
}
-
}
-
-
updateProxingRequest(msg);
-
sip_provider.sendMessage(msg);
-
}
-
-
/** Processes the Proxy headers of the request.
-
* Such headers are: Via, Record-Route, Route, Max-Forwards, etc. */
-
protected Message updateProxingRequest(Message msg)
-
{ printLog("inside updateProxingRequest(msg)",LogLevel.LOW);
-
System.out.println("header part1");
-
// remove Route if present
-
boolean is_on_route=false;
-
if (msg.hasRouteHeader())
-
{ MultipleHeader mr=msg.getRoutes();
-
System.out.println("X route");
-
SipURL route=(new RouteHeader(mr.getTop())).getNameAddress().getAddress();
-
if (isResponsibleFor(route.getHost(),route.getPort()))
-
{ mr.removeTop();
-
if (mr.size()>0) msg.setRoutes(mr);
-
else msg.removeRoutes();
-
is_on_route=true;
-
}
-
}
-
// add Record-Route?
-
if (server_profile.on_route && msg.isInvite() && !is_on_route)
-
{ SipURL rr_url;
-
System.out.println("+ route");
-
if (sip_provider.getPort()==SipStack.default_port) rr_url=new SipURL(sip_provider.getViaAddress());
-
else rr_url=new SipURL(sip_provider.getViaAddress(),sip_provider.getPort());
-
if (server_profile.loose_route) rr_url.addLr();
-
RecordRouteHeader rrh=new RecordRouteHeader(new NameAddress(rr_url));
-
msg.addRecordRouteHeader(rrh);
-
}
-
// which protocol?
-
String proto=null;
-
if (msg.hasRouteHeader())
-
{ SipURL route=msg.getRouteHeader().getNameAddress().getAddress();
-
System.out.println("protocol");
-
if (route.hasTransport()) proto=route.getTransport();
-
}
-
else proto=msg.getRequestLine().getAddress().getTransport();
-
if (proto==null) proto=sip_provider.getDefaultTransport();
-
-
// add Via
-
ViaHeader via=new ViaHeader(proto,sip_provider.getViaAddress(),sip_provider.getPort());
-
if (sip_provider.isRportSet()) via.setRport();
-
String branch=sip_provider.pickBranch(msg);
-
System.out.println("VIA");
-
-
if (server_profile.loop_detection)
-
{ String loop_tag=msg.getHeader(Loop_Tag).getValue();
-
if (loop_tag!=null)
-
{ msg.removeHeader(Loop_Tag);
-
branch+=loop_tag;
-
}
-
}
-
via.setBranch(branch);
-
msg.addViaHeader(via);
-
-
// decrement Max-Forwards
-
MaxForwardsHeader maxfwd=msg.getMaxForwardsHeader();
-
if (maxfwd!=null) maxfwd.decrement();
-
else maxfwd=new MaxForwardsHeader(SipStack.max_forwards);
-
msg.setMaxForwardsHeader(maxfwd);
-
-
// domain name routing
-
if (server_profile.domain_routing_rules!=null && server_profile.domain_routing_rules.length>0)
-
{ RequestLine rl=msg.getRequestLine();
-
System.out.println("domain routing");
-
-
SipURL request_uri=rl.getAddress();
-
for (int i=0; i<server_profile.domain_routing_rules.length; i++)
-
{ RoutingRule rule=(RoutingRule)server_profile.domain_routing_rules[i];
-
SipURL nexthop=rule.getNexthop(request_uri);
-
if (nexthop!=null)
-
{ printLog("domain-based routing: "+rule.toString()+": YES",LogLevel.MEDIUM);
-
printLog("target="+nexthop.toString(),LogLevel.MEDIUM);
-
rl=new RequestLine(rl.getMethod(),nexthop);
-
msg.setRequestLine(rl);
-
break;
-
}
-
else printLog("prefix-based routing: "+rule.toString()+": NO",LogLevel.MEDIUM);
-
}
-
}
-
return msg;
-
}
-
continue here... sorry it's so long, hope you won't mind. -
/** When a new response message is received */
-
public void processResponse(Message resp)
-
{ printLog("inside processResponse(msg)",LogLevel.MEDIUM);
-
System.out.println("response message");
-
if(call_logger!=null) call_logger.update(resp);
-
-
updateProxingResponse(resp);
-
-
if (resp.hasViaHeader()) sip_provider.sendMessage(resp);
-
else
-
printLog("no VIA header found: message discarded",LogLevel.HIGH);
-
}
-
-
/** Sends a server final response */
-
protected void statefulServerResponse(TransactionServer ts, Message resp)
-
{ printLog("inside statefulServerResponse(msg)",LogLevel.MEDIUM);
-
System.out.println("send to server final response");
-
printLog("Server response: "+resp.getStatusLine().toString(),LogLevel.MEDIUM);
-
ts.respondWith(resp);
-
}
-
-
/** Process provisional response */
-
protected void processProvisionalResponse(Transaction transaction, Message resp)
-
{ printLog("inside processProvisionalResponse(t,resp)",LogLevel.MEDIUM);
-
System.out.println("Cprovisional response");
-
int code=resp.getStatusLine().getCode();
-
TransactionServer ts=state.getServer(transaction);
-
if (ts!=null && code!=100)
-
{ updateProxingResponse(resp);
-
if (resp.hasViaHeader()) ts.respondWith(resp);
-
}
-
}
-
-
/** Process failure response */
-
protected void processFailureResponse(Transaction transaction, Message resp)
-
{ printLog("inside processFailureResponse(t,resp)",LogLevel.MEDIUM);
-
System.out.println("failured response");
-
TransactionServer ts=state.getServer(transaction);
-
state.removeClient(transaction);
-
if (ts==null) return;
-
if (!state.hasServer(ts)) return;
-
// updates the non-2xx final response
-
state.setFinalResponse(ts,resp);
-
// if there are no more pending clients, sends the final response
-
HashSet clients=state.getClients(ts);
-
if (clients.isEmpty())
-
{ printLog("only this tr_client remained: send the response",LogLevel.LOW);
-
resp=state.getFinalResponse(ts);
-
updateProxingResponse(resp);
-
if (resp.hasViaHeader()) ts.respondWith(resp);
-
state.removeServer(ts);
-
}
-
}
-
-
/** Process success response */
-
protected void processSuccessResponse(Transaction transaction, Message resp)
-
{ printLog("inside processSuccessResponse(t,resp)",LogLevel.MEDIUM);
-
System.out.println("Success response");
-
TransactionServer ts=state.getServer(transaction);
-
state.removeClient(transaction);
-
if (ts==null) return;
-
updateProxingResponse(resp);
-
if (resp.hasViaHeader())
-
{ ts.respondWith(resp);
-
if (!state.hasServer(ts)) return;
-
//else
-
// cancel all other pending transaction clients
-
HashSet clients=state.getClients(ts);
-
//printLog("Cancel pending clients..",LogLevel.LOW);
-
//if (clients==null) return;
-
printLog("Cancelling "+clients.size()+" pending clients",LogLevel.LOW);
-
for (Iterator i=clients.iterator(); i.hasNext(); )
-
{ Transaction tc=(Transaction)i.next();
-
Message cancel=MessageFactory.createCancelRequest(tc.getRequestMessage());
-
TransactionClient tr_cancel=new TransactionClient(sip_provider_server,cancel,null);
-
tr_cancel.request();
-
}
-
state.removeServer(ts);
-
}
-
}
-
-
-
/** Process timeout */
-
protected void processTimeout(Transaction transaction)
-
{ printLog("inside processTimeout(t)",LogLevel.MEDIUM);
-
System.out.println("Time out processing");
-
TransactionServer ts=state.getServer(transaction);
-
state.removeClient(transaction);
-
if (ts==null) return;
-
HashSet clients=(HashSet)state.getClients(ts);
-
if (clients==null) return;
-
if (clients.isEmpty())
-
{ printLog("DEBUG: responding..",LogLevel.LOW);
-
//printLog("DEBUG:\r\n"+state.getFinalResponse(ts),LogLevel.LOW);
-
Message resp=state.getFinalResponse(ts);
-
updateProxingResponse(resp);
-
if (resp.hasViaHeader()) statefulServerResponse(ts,resp);
-
state.removeServer(ts);
-
}
-
}
-
-
/** Processes the Proxy headers of the response.
-
* Such headers are: Via, .. */
-
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().elementAt(0));
-
if (vh.getHost().equals(sip_provider.getViaAddress())) resp.removeViaHeader();
-
return resp;
-
}
-
-
-
// ******************* TransactionClient callback methods *******************
-
-
/** When the TransactionClient is in "Proceeding" state and receives a new 1xx response */
-
public void onTransProvisionalResponse(TransactionClient transaction, Message resp)
-
{ processProvisionalResponse(transaction,resp);
-
}
-
-
/** When the TransactionClient goes into the "Completed" state, receiving a failure response */
-
public void onTransFailureResponse(TransactionClient transaction, Message resp)
-
{ processFailureResponse(transaction,resp);
-
}
-
-
/** When an TransactionClient goes into the "Terminated" state, receiving a 2xx response */
-
public void onTransSuccessResponse(TransactionClient transaction, Message resp)
-
{ processSuccessResponse(transaction,resp);
-
}
-
-
/** When the TransactionClient goes into the "Terminated" state, caused by transaction timeout */
-
public void onTransTimeout(TransactionClient transaction)
-
{ processTimeout(transaction);
-
}
-
-
// ****************************** Logs *****************************
-
-
/** Adds a new string to the default Log */
-
private void printLog(String str, int level)
-
{ if (log!=null)
-
{
-
log.println("StatefulProxy: "+str,level+SipStack.LOG_LEVEL_UA);
-
log.println("Proxy: "+str,level+SipStack.LOG_LEVEL_UA);
-
}
-
}
-
-
-
// ****************************** MAIN *****************************
-
-
/** The main method. */
-
public static void main(String[] args)
-
{
-
-
String file=null;
-
boolean prompt_exit=false;
-
-
for (int i=0; i<args.length; i++)
-
{ if (args[i].equals("-f") && args.length>(i+1))
-
{ file=args[++i];
-
continue;
-
}
-
}
-
-
SipStack.init(file);
-
SipProvider sip_provider=new SipProvider(file);
-
ServerProfile server_profile=new ServerProfile(file);
-
-
System.out.println("Start");
-
-
new Proxy(sip_provider,server_profile);
-
-
System.out.println("Connected");
-
-
}
-
-
}
-
Thanks for ur help..
Anybody?
Please try to help me.
Sign in to post your reply or Sign up for a free account.
Similar topics |
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";
$port = "8080";
$url = "http://www.myhost.com/folder/script.dll?variable=hello";
|
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 Internet Explorer connection settings
(proxy:8080). However, as soon as this setting is enabled, the remoting
program running on their pc stops communicating with the server it sends
data to. I've disabled proxy setting on the affected pc, rebooted...
|
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 I can not even open the project I
created for my web pages. When I do either, I keep getting a messagebox
that says:
"Visual Studio could nor create or open the application because your
browser is configured to use a proxy server for the...
|
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, actually... the
problem is, if the user is behind a proxy, then the Connect method
fails (times out).
How do I get around this? I thought this would be a common issue and
that there would be plenty of code out there to demonstrate how to...
|
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.
Unfortunately, the .NET Framework does not support automatic proxy discovery
scripts. See:
http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;307220
The article above details that the way to workaround this is to edit the...
| |
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 code.
Dim objPreReq As PDCPreReq.PreReqs
Dim objProxy As System.Net.WebProxy = System.Net.WebProxy.GetDefaultProxy
objProxy.Credentials = System.Net.CredentialCache.DefaultCredentials
|
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 the internet.
Then I want to send the answer back to the browser...
Sounds simple...
But how can I do this?
|
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 transfer file attachments to and from the server.
I'm using WSE 2.0 SP3 which is supposed to support FX 2.0, as far as I know.
(We will soon move on to MTOM, however I'm stuck with DIME for now; the
solution was originally written for FX 1.1, and I...
|
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 cpan.pm , it gives the following error, can any one help,
You have no /root/.cpan/sources/MIRRORED.BY
I'm trying to fetch one
CPAN: LWP::UserAgent loaded ok
Fetching with LWP:
|
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 Windows 2003 servers, but
not on the other one.
The application is a C++ .Net /clr Windows Service. It communicates with
our server by sending and receiving XML using the WebClient object. The
error they are receiving is “The remote server...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
| |
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 tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
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 Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
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 presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |