Пример #1
0
void t_auth::remove_from_cache(const string &realm) {
    if (realm.empty()) {
        cache.clear();
    } else {
        list<t_cr_cache_entry>::iterator i = find_cache_entry(t_url(), realm);
        if (i != cache.end()) {
            cache.erase(i);
        }
    }
}
Пример #2
0
void WizardForm::validate()
{
	QString s;
	
	// Validity check user page
	// SIP username is mandatory
	if (usernameLineEdit->text().isEmpty()) {
        ((t_gui *)ui)->cb_show_msg(this, tr("You must fill in a user name for your SIP account.").toStdString(),
				MSG_CRITICAL);
		usernameLineEdit->setFocus();
		return;
	}
	
	// SIP user domain is mandatory
	if (domainLineEdit->text().isEmpty()) {
		((t_gui *)ui)->cb_show_msg(this, tr(
				"You must fill in a domain name for your SIP account.\n"
				"This could be the hostname or IP address of your PC "
                "if you want direct PC to PC dialing.").toStdString(),
				MSG_CRITICAL);
		domainLineEdit->setFocus();
		return;
	}
	
	// SIP proxy
	if (proxyLineEdit->text() != "") {
		s = USER_SCHEME;
		s.append(':').append(proxyLineEdit->text());
        t_url u(s.toStdString());
		if (!u.is_valid() || u.get_user() != "") {
            ((t_gui *)ui)->cb_show_msg(this, tr("Invalid value for SIP proxy.").toStdString(),
					MSG_CRITICAL);
			proxyLineEdit->setFocus();
			proxyLineEdit->selectAll();
			return;
		}
	}
	
	// Register and publish presence at startup
	if (serviceProviderComboBox->currentText() == tr(PROV_NONE)) {
		user_config->set_register_at_startup(false);
		user_config->set_pres_publish_startup(false);
	}
	
	// STUN server
	if (stunServerLineEdit->text() != "") {
		s = "stun:";
		s.append(stunServerLineEdit->text());
        t_url u(s.toStdString());
		if (!u.is_valid() || u.get_user() != "") {
            ((t_gui *)ui)->cb_show_msg(this, tr("Invalid value for STUN server.").toStdString(),
					MSG_CRITICAL);
			stunServerLineEdit->setFocus();
			stunServerLineEdit->selectAll();
			return;
		}
	}
	
	// Set all values in the user_config object
	// USER
    user_config->set_display(displayLineEdit->text().toStdString());
    user_config->set_name(usernameLineEdit->text().toStdString());
    user_config->set_domain(domainLineEdit->text().toStdString());
    user_config->set_auth_name(authNameLineEdit->text().toStdString());
    user_config->set_auth_pass(authPasswordLineEdit->text().toStdString());
	
	// SIP SERVER
	user_config->set_use_outbound_proxy(!proxyLineEdit->text().isEmpty());
	s = USER_SCHEME;
	s.append(':').append(proxyLineEdit->text());
    user_config->set_outbound_proxy(t_url(s.toStdString()));
	
	// NAT
	user_config->set_use_stun(!stunServerLineEdit->text().isEmpty());
	s = "stun:";
	s.append(stunServerLineEdit->text());
    user_config->set_stun_server(t_url(s.toStdString()));
	
	// Save user config
	string error_msg;
	if (!user_config->write_config(user_config->get_filename(), error_msg)) {
		// Failed to write config file
		((t_gui *)ui)->cb_show_msg(this, error_msg, MSG_CRITICAL);
		return;
	}
	
	emit success();
	accept();
}
void apnSettingsDialog::accepted()
{
    // check ip address
    QRegExp t_ip("(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}"
                     "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)");
    QRegExp t_url("^(https?\\:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w\\.-]*)*\\/?$");
    QRegExp t_url2("^(https?\\:\\/\\/)?((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(\\/[\\/\\w\\.-]*)*\\/?$");

    // if something goes wrong, put info here
    QString message;


    if(!ui->addressEdit->text().isEmpty())
    {
        if(ui->addressModeComboBox->currentIndex()==TEXT)
        {
            if(t_url.indexIn(ui->addressEdit->text(), 0)!=0) message.append(tr("\"Address\" seems not to be correct.\n"));
        }
        else if(ui->addressModeComboBox->currentIndex()==IP_ADDR)
        {
            if(t_url2.indexIn(ui->addressEdit->text(), 0)!=0) message.append(tr("\"Address\" seems not to be correct.\n"));
        }
    }
    if(!ui->dns1Edit->text().isEmpty())
    {
        if(t_ip.indexIn(ui->dns1Edit->text(), 0)!=0) message.append(tr("\"DNS 1\" address is incorrect.\n"));
    }
    if(!ui->dns2Edit->text().isEmpty())
    {
        if(t_ip.indexIn(ui->dns2Edit->text(), 0)!=0) message.append(tr("\"DNS 2\" address is incorrect.\n"));
    }

    if(!message.isEmpty())
    {
        QMessageBox::warning(this, tr("Incorrect input"), message, QMessageBox::Ok);
        return;
    }


    ap_name_t->clear();
    ap_name_t->append(ui->apnEdit->text());
    login_t->clear();
    login_t->append(ui->loginEdit->text());
    password_t->clear();
    password_t->append(ui->passwordEdit->text());
    (*request_password_t) = ui->requestPassCheckBox->isChecked();
    (*use_proxy_t) = ui->useProxyCheckBox->isChecked();

    switch(ui->addressModeComboBox->currentIndex())
    {
        case 0:
            (*addr_mode_t) = IP_ADDR;
            break;
        case 1:
            (*addr_mode_t) = TEXT;
            break;
        default:
            (*addr_mode_t) = IP_ADDR;
            break;
    }


    address_t->clear();
    address_t->append(ui->addressEdit->text());
    DNS1_t->clear();
    DNS1_t->append(ui->dns1Edit->text());
    DNS2_t->clear();
    DNS2_t->append(ui->dns2Edit->text());

    *changed_t = true;

    this->close();
}
Пример #4
0
void t_phone_user::registration(t_register_type register_type, bool re_register,
		unsigned long expires)
{
	// If STUN is enabled, then do a STUN query before registering to
	// determine the public IP address.
	if (register_type == REG_REGISTER && use_stun) {
		if (stun_public_ip_sip == 0) {
			send_stun_request();
			register_after_stun = true;
			registration_time = expires;
			return;
		}
		
		stun_binding_inuse_registration = true;
	}

	// Stop registration timer for non-query request
	if (register_type != REG_QUERY) {
		phone->stop_timer(PTMR_REGISTRATION, this);
	}

	// Create call-id if no call-id is created yet
	if (register_call_id == "") {
		register_call_id = NEW_CALL_ID(user_config);
	}

	// RFC 3261 10.2
	// Construct REGISTER request

	t_request *req = create_request(REGISTER, 
			t_url(string(USER_SCHEME) + ":" + user_config->get_domain()));

	// To
	req->hdr_to.set_uri(user_config->create_user_uri(false));
	req->hdr_to.set_display(user_config->get_display(false));

	//Call-ID
	req->hdr_call_id.set_call_id(register_call_id);

	// CSeq
	req->hdr_cseq.set_method(REGISTER);
	req->hdr_cseq.set_seqnr(++register_seqnr);

	// Contact
        t_contact_param contact;

        switch (register_type) {
        case REG_REGISTER:
        	// URI
                contact.uri.set_url(user_config->create_user_contact(false,
                		h_ip2str(req->get_local_ip())));
                
                // Expires
                if (expires > 0) {
			if (user_config->get_registration_time_in_contact()) {
				contact.set_expires(expires);
			} else {
				req->hdr_expires.set_time(expires);
			}
		}
		
		// q-value
		if (user_config->get_reg_add_qvalue()) {
			contact.set_qvalue(user_config->get_reg_qvalue());
		}

                req->hdr_contact.add_contact(contact);
                break;
        case REG_DEREGISTER:
                contact.uri.set_url(user_config->create_user_contact(false,
                		h_ip2str(req->get_local_ip())));
 		if (user_config->get_registration_time_in_contact()) {
			contact.set_expires(0);
		} else {
			req->hdr_expires.set_time(0);
		}
                req->hdr_contact.add_contact(contact);
                break;
        case REG_DEREGISTER_ALL:
                req->hdr_contact.set_any();
                req->hdr_expires.set_time(0);
                break;
        default:
                break;
        }

	// Allow
	SET_HDR_ALLOW(req->hdr_allow, user_config);

	// Store request in the proper place
	t_tuid tuid;

        switch(register_type) {
        case REG_REGISTER:
		// Delete a possible pending registration request
		if (r_register) {
			MEMMAN_DELETE(r_register);
			delete r_register;
		}
                r_register = new t_client_request(user_config, req, 0);
		MEMMAN_NEW(r_register);
                tuid = r_register->get_tuid();

                // Store expiration time for re-registration.
                registration_time = expires;
                break;
        case REG_QUERY:
		// Delete a possible pending query registration request
		if (r_query_register) {
			MEMMAN_DELETE(r_query_register);
			delete r_query_register;
		}
                r_query_register = new t_client_request(user_config, req, 0);
		MEMMAN_NEW(r_query_register);
                tuid = r_query_register->get_tuid();
                break;
        case REG_DEREGISTER:
        case REG_DEREGISTER_ALL:
		// Delete a possible pending de-registration request
		if (r_deregister) {
			MEMMAN_DELETE(r_deregister);
			delete r_deregister;
		}
                r_deregister = new t_client_request(user_config, req, 0);
		MEMMAN_NEW(r_deregister);
                tuid = r_deregister->get_tuid();
                break;
        default:
                assert(false);
        }

        // Send REGISTER
        authorizor.set_re_register(re_register);
	ui->cb_register_inprog(user_config, register_type);
        phone->send_request(user_config, req, tuid);
	MEMMAN_DELETE(req);
        delete req;
}