Merge change 4731 into donut
* changes: gsm: Remove PppLink since pppd_gprs service does not exist.
This commit is contained in:
@@ -58,18 +58,9 @@ public class PdpConnection extends DataConnection {
|
||||
private String pdp_name;
|
||||
private ApnSetting apn;
|
||||
|
||||
// dataLink is only used to support pppd link
|
||||
private DataLink dataLink;
|
||||
|
||||
//***** Constructor
|
||||
PdpConnection(GSMPhone phone) {
|
||||
super(phone);
|
||||
this.dataLink = null;
|
||||
|
||||
if (SystemProperties.get("ro.radio.use-ppp","no").equals("yes")) {
|
||||
dataLink = new PppLink((GsmDataConnectionTracker) phone.mDataConnection, phone);
|
||||
dataLink.setOnLinkChange(this, EVENT_LINK_STATE_CHANGED, null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,10 +88,6 @@ public class PdpConnection extends DataConnection {
|
||||
}
|
||||
|
||||
private void tearDownData(Message msg) {
|
||||
if (dataLink != null) {
|
||||
dataLink.disconnect();
|
||||
}
|
||||
|
||||
if (phone.mCM.getRadioState().isOn()) {
|
||||
phone.mCM.deactivateDataCall(cid, obtainMessage(EVENT_DEACTIVATE_DONE, msg));
|
||||
}
|
||||
@@ -313,11 +300,7 @@ public class PdpConnection extends DataConnection {
|
||||
}
|
||||
}
|
||||
|
||||
if (dataLink != null) {
|
||||
dataLink.connect();
|
||||
} else {
|
||||
onLinkStateChanged(DataLink.LinkState.LINK_UP);
|
||||
}
|
||||
onLinkStateChanged(DataLink.LinkState.LINK_UP);
|
||||
|
||||
if (DBG) log("PDP setup on cid = " + cid);
|
||||
}
|
||||
|
||||
@@ -1,219 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2006 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.internal.telephony.gsm;
|
||||
|
||||
import android.database.Cursor;
|
||||
import android.os.Message;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.SystemService;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.telephony.DataLink;
|
||||
import com.android.internal.telephony.DataConnectionTracker.State;
|
||||
import com.android.internal.telephony.PhoneBase;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.RandomAccessFile;
|
||||
|
||||
/**
|
||||
* Represents a PPP link.
|
||||
*
|
||||
* Ideally this would be managed by the RIL implementation, but
|
||||
* we currently have implementations where this is not the case.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
final class PppLink extends DataLink {
|
||||
private static final String LOG_TAG = "GSM";
|
||||
|
||||
static final String PATH_PPP_OPERSTATE = "/sys/class/net/ppp0/operstate";
|
||||
static final String SERVICE_PPPD_GPRS = "pppd_gprs";
|
||||
static final String PROPERTY_PPPD_EXIT_CODE = "net.gprs.ppp-exit";
|
||||
static final int POLL_SYSFS_MILLIS = 5 * 1000;
|
||||
static final int EVENT_POLL_DATA_CONNECTION = 2;
|
||||
static final int EVENT_PPP_OPERSTATE_CHANGED = 8;
|
||||
static final int EVENT_PPP_PIDFILE_CHANGED = 9;
|
||||
|
||||
static final byte[] UP_ASCII_STRING = new byte[] {
|
||||
'u' & 0xff,
|
||||
'p' & 0xff,
|
||||
};
|
||||
static final byte[] DOWN_ASCII_STRING = new byte[] {
|
||||
'd' & 0xff,
|
||||
'o' & 0xff,
|
||||
'w' & 0xff,
|
||||
'n' & 0xff,
|
||||
};
|
||||
static final byte[] UNKNOWN_ASCII_STRING = new byte[] {
|
||||
'u' & 0xff,
|
||||
'n' & 0xff,
|
||||
'k' & 0xff,
|
||||
'n' & 0xff,
|
||||
'o' & 0xff,
|
||||
'w' & 0xff,
|
||||
'n' & 0xff,
|
||||
};
|
||||
private final byte[] mCheckPPPBuffer = new byte[32];
|
||||
|
||||
private PhoneBase phone;
|
||||
|
||||
int lastPppdExitCode = EXIT_OK;
|
||||
|
||||
|
||||
PppLink(GsmDataConnectionTracker dc, GSMPhone p) {
|
||||
super(dc);
|
||||
this.phone = p;
|
||||
}
|
||||
|
||||
public void connect() {
|
||||
// Clear any previous exit code
|
||||
SystemProperties.set(PROPERTY_PPPD_EXIT_CODE, "");
|
||||
SystemService.start(SERVICE_PPPD_GPRS);
|
||||
removeMessages(EVENT_POLL_DATA_CONNECTION);
|
||||
Message poll = obtainMessage();
|
||||
poll.what = EVENT_POLL_DATA_CONNECTION;
|
||||
sendMessageDelayed(poll, POLL_SYSFS_MILLIS);
|
||||
}
|
||||
|
||||
public void disconnect() {
|
||||
SystemService.stop(SERVICE_PPPD_GPRS);
|
||||
}
|
||||
|
||||
public int getLastLinkExitCode() {
|
||||
return lastPppdExitCode;
|
||||
}
|
||||
|
||||
public void setPasswordInfo(Cursor cursor) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
FileOutputStream output = null;
|
||||
|
||||
try {
|
||||
output = new FileOutputStream("/etc/ppp/pap-secrets");
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
builder.append(cursor.getString(cursor.getColumnIndex("user")));
|
||||
builder.append(" ");
|
||||
builder.append(cursor.getString(cursor.getColumnIndex("server")));
|
||||
builder.append(" ");
|
||||
builder.append(cursor.getString(cursor.getColumnIndex("password")));
|
||||
builder.append("\n");
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
|
||||
output.write(builder.toString().getBytes());
|
||||
} catch (java.io.IOException e) {
|
||||
Log.e(LOG_TAG, "Could not create '/etc/ppp/pap-secrets'", e);
|
||||
} finally {
|
||||
try {
|
||||
if (output != null) output.close();
|
||||
} catch (java.io.IOException e) {
|
||||
Log.e(LOG_TAG, "Error closing '/etc/ppp/pap-secrets'", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void handleMessage (Message msg) {
|
||||
|
||||
switch (msg.what) {
|
||||
|
||||
case EVENT_POLL_DATA_CONNECTION:
|
||||
checkPPP();
|
||||
|
||||
// keep polling in case interface goes down
|
||||
if (dataConnection.getState() != State.IDLE) {
|
||||
Message poll = obtainMessage();
|
||||
poll.what = EVENT_POLL_DATA_CONNECTION;
|
||||
sendMessageDelayed(poll, POLL_SYSFS_MILLIS);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkPPP() {
|
||||
boolean connecting = (dataConnection.getState() == State.CONNECTING);
|
||||
|
||||
try {
|
||||
RandomAccessFile file = new RandomAccessFile(PATH_PPP_OPERSTATE, "r");
|
||||
file.read(mCheckPPPBuffer);
|
||||
file.close();
|
||||
|
||||
// Unfortunately, we're currently seeing operstate
|
||||
// "unknown" where one might otherwise expect "up"
|
||||
if (ArrayUtils.equals(mCheckPPPBuffer, UP_ASCII_STRING, UP_ASCII_STRING.length)
|
||||
|| ArrayUtils.equals(mCheckPPPBuffer, UNKNOWN_ASCII_STRING,
|
||||
UNKNOWN_ASCII_STRING.length)
|
||||
&& dataConnection.getState() == State.CONNECTING) {
|
||||
|
||||
Log.i(LOG_TAG,
|
||||
"found ppp interface. Notifying GPRS connected");
|
||||
|
||||
if (mLinkChangeRegistrant != null) {
|
||||
mLinkChangeRegistrant.notifyResult(LinkState.LINK_UP);
|
||||
}
|
||||
|
||||
connecting = false;
|
||||
} else if (dataConnection.getState() == State.CONNECTED
|
||||
&& ArrayUtils.equals(mCheckPPPBuffer, DOWN_ASCII_STRING,
|
||||
DOWN_ASCII_STRING.length)) {
|
||||
|
||||
Log.i(LOG_TAG,
|
||||
"ppp interface went down. Reconnecting...");
|
||||
|
||||
if (mLinkChangeRegistrant != null) {
|
||||
mLinkChangeRegistrant.notifyResult(LinkState.LINK_DOWN);
|
||||
}
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
if (! (ex instanceof FileNotFoundException)) {
|
||||
Log.i(LOG_TAG, "Poll ppp0 ex " + ex.toString());
|
||||
}
|
||||
|
||||
if (dataConnection.getState() == State.CONNECTED &&
|
||||
mLinkChangeRegistrant != null) {
|
||||
mLinkChangeRegistrant.notifyResult(LinkState.LINK_DOWN);
|
||||
}
|
||||
}
|
||||
|
||||
// CONNECTING means pppd has started but negotiation is not complete
|
||||
// If we're still CONNECTING here, check to see if pppd has
|
||||
// already exited
|
||||
if (connecting) {
|
||||
String exitCode;
|
||||
|
||||
exitCode = SystemProperties.get(PROPERTY_PPPD_EXIT_CODE, "");
|
||||
|
||||
if (!exitCode.equals("")) {
|
||||
// pppd has exited. Let's figure out why
|
||||
lastPppdExitCode = Integer.parseInt(exitCode);
|
||||
|
||||
Log.d(LOG_TAG,"pppd exited with " + exitCode);
|
||||
|
||||
if (mLinkChangeRegistrant != null) {
|
||||
mLinkChangeRegistrant.notifyResult(LinkState.LINK_EXITED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void log(String s) {
|
||||
Log.d(LOG_TAG, "[PppLink] " + s);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user